Код: Выделить всё
struct LoggedInUserView: View{
@ObservedObject var viewModel: LoggedInUserViewModel
@StateObject var sharedPortionViewModel: SharedPortionViewModel(userName: "")
var body: some View{
//Some specific-to-LoggedInUser UI elements
SharedPortionUserView(sharedPortionViewModel: sharedPortionViewModel)
}
}
struct OtherUserView: View{
@ObservedObject var viewModel: OtherUserViewModel()
@StateObject var sharedPortionViewModel: SharedPortionViewModel(userName: "")
var body: some View{
//Some specific-to-OtherUser UI elements
SharedPortionUserView(sharedPortionViewModel: sharedPortionViewModel)
}
}
Код: Выделить всё
SharedPortionViewModelВсе, что я пытаюсь сделать, это передать имя пользователя соответствующего пользователя при создании StateObject в обоих случаях, но я нахожу это на удивление сложным. делать. Различные подходы, которые я видел, включают в представление собственные инициализаторы, которых мне хотелось бы избежать. Я также рассматривал что-то вроде:
Код: Выделить всё
var passedUserName: String //tried a variety of different property wrappers
@StateObject var sharedPortionViewModel: SharedPortionViewModel(userName: passedUserName)
Я также рассмотрел возможность изменения описанного выше подхода:
Код: Выделить всё
@State private var sharedProfileViewModel: SharedUserProfilePageViewModel?
Код: Выделить всё
.onAppear {
if sharedProfileViewModel == nil {
sharedProfileViewModel = SharedUserProfilePageViewModel(userName: userName)
}
}
Я мог бы создать модель представления перед инициализацией навигации из родительского представления, а затем передать ее как уже Created-ViewModel, но это выглядит неуклюже.
Я что-то упустил? Почему это так важно? Действительно ли это единственные способы добиться этого? Я описал лучший подход выше и неправильно отклонил его?
Подробнее здесь: https://stackoverflow.com/questions/786 ... ialization
Мобильная версия