【发布时间】:2022-10-20 10:33:08
【问题描述】:
我有一个基于模型数据显示切换列表的视图。这个模型有一个@Published 变量,它会根据切换选择进行更改。
class Model: ObservableObject, Hashable {
var id: String
@Published var isSelected: Bool
init(id: String, isSelected: Bool) {
self.id = id
self.isSelected = isSelected
}
...
}
class ViewModel: ObservableObject {
var list: [Model]
init() { ...}
...
func save() {
}
func clear() {
}
}
struct MyView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
VStack {
ForEach(viewModel.list, id: \.self) { model in
Toggle(model.id, isOn: $model.isSelected)
}
Button("Done") {
viewModel.save()
}
Button("Clear") {
viewModel.clear()
}
...
}
}
}
问题是,因为我有一系列带有@Publsihed 的模型,
- 如何知道用户是否更改了任何切换,所以我可以启用/禁用保存按钮
- 如何知道列出所有已更改的切换(即模型 isSelected 已更改),例如当我按保存时
【问题讨论】:
-
一些观察:不要像你一样嵌套
ObservableObject,它会产生问题。重新构建您的代码以拥有struct Model:...和var isSelected: Bool,并在ViewModel中拥有@Published var list: [Model] -
我建议尝试将您的问题分开(在不同的帖子中),以便他们可以专注于一件事,并且更容易回答。