【发布时间】:2021-08-25 07:19:35
【问题描述】:
我有一个 ViewModel VM_App 和一个名称列表,另一个 View V_NamesList 在 V_App 内应该显示这些名称。为此,我将列表从VM_App 传递到VM_NamesList,但在编辑名称时视图会被重绘。
VM_App
class VM_App: ObservableObject {
@Published var names: [String] = [
"Tobias",
"Jonathan",
""
]
}
V_App
struct V_App: View {
@ObservedObject var vm: VM_App = VM_App()
var body: some View {
VStack {
V_NamesList(
VM_NamesList(names: $vm.names)
)
}
}
}
VM_NamesList
class VM_NamesList: ObservableObject {
@Binding var names: [String]
init(names: Binding<[String]>) {
self._names = names
}
}
V_NamesList
struct V_NamesList: View {
@ObservedObject var vm: VM_NamesList
init(_ vm: VM_NamesList) {
self.vm = vm
}
var body: some View {
ForEach(Array(vm.names.enumerated()), id: \.element) { (i, name) in
TextField("New Player", text: $vm.names[i])
}
}
}
【问题讨论】:
-
在您的视图模型中使用
@Published而不是@Binding。
标签: swift mvvm swiftui viewmodel