#swift #xcode #swiftui
#swift #xcode #swiftui
Вопрос:
struct ProfileEditView: View {
@ObservedObject var viewModel: UsersViewModel
@StateObject var auth: Authenticator
@State var showingImageEditor: Bool = false
init(_ viewModel: UsersViewModel, _ auth: Authenticator) {
self.viewModel = viewModel
self.auth = auth
UITableView.appearance().backgroundColor = UIColor.clear
UITableViewCell.appearance().selectionStyle = .none
}
var body: some View { }
}
Я пытаюсь вручную инициализировать представление, которое принимает a StateObject
в качестве параметра. Я получаю сообщение об ошибке: Cannot assign to property: 'auth' is a get-only property
. Как правильно написать инициализатор?
Ответ №1:
Я не могу полностью воспроизвести ваш код без ваших определений Authenticator
и UsersViewModel
, но я получил его для компиляции:
class UsersViewModel: ObservableObject {}
class Authenticator: ObservableObject {}
struct ProfileEditView: View {
@ObservedObject var viewModel: UsersViewModel
@StateObject var auth: Authenticator
@State var showingImageEditor: Bool = false
init(_ viewModel: ObservedObject<UsersViewModel>, _ auth: Authenticator) {
_viewModel = viewModel
_auth = StateObject(wrappedValue: auth)
UITableView.appearance().backgroundColor = UIColor.clear
UITableViewCell.appearance().selectionStyle = .none
}
var body: some View {
Text("something")
}
}
Это ключевые изменения:
init(_ viewModel: ObservedObject<UsersViewModel>, _ auth: Authenticator) {
_viewModel = viewModel
_auth = StateObject(wrappedValue: auth)
Если вы не понимаете мои изменения, вам следует погуглить
«обертки свойств swift»
чтобы лучше понять, что такое оболочки свойств и как их использовать.
Комментарии:
1. Это действительно ответ на этот вопрос.