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 { }
}
私は手動でViewを初期化しようとしています。状態オブジェクトパラメータとして。次のエラーが発生します:
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)
私の変更が理解できない場合は、Googleで検索してください
「Swift プロパティ ラッパー」
プロパティ ラッパーとは何か、どのように使用するのかをより深く理解します。