【发布时间】:2021-03-07 17:34:15
【问题描述】:
我有一个名为UserService 的视图模型。假设这会存储所有用户数据,并且会在 Firestore 中的数据发生更改时自动更新。
然后我有一个名为TextField 的视图phone。这用作获取用户电话号码的输入。
这个视图也有一个 ViewModel,这个 vm 包含 TextField 使用的 @Published var phone: String = "" 属性。
问题在于,除了使用 TextField 更新值之外,我还希望它显示来自 UserService 的当前值。
我不知道如何将这些数据从UserService 传递给TestViewModel。如果将 UserService 放入 TestViewModel 中,则属性不会实时更新,因为 SwiftUI 中尚不支持 vm inside vm。现在我已经结束了两个独立的属性。 phone 内 UserService 和 phone 内 TestViewModel。
我曾想过在 init() (TestViewModel) 上手动更新 phone,但我不确定这是否是正确的做法,因为我还有 phone 以外的其他属性
我怎样才能做到这样?
struct User: Identifiable, Codable {
var phone: String
}
class UserService: ObservableObject {
@Published var user: User?
}
struct TestView: View {
@ObservedObject var testViewModel = TestViewModel()
@EnvironmentObject var userService: UserService
var body: some View {
Form {
Section(header: Text("PHONE NUMBER")) {
TextField("Phone number", text: $testViewModel.phone)
}
}
}
}
class TestViewModel: ObservableObject {
@Published var phone: String = ""
init() {
prefillForm()
}
func prefillForm() {
//
}
}
【问题讨论】:
标签: ios swift xcode swiftui combine