这是我的问题:MainView
显示ChildView
并给它EnvironmentObject
一个包含一组选定项目的内容。
ChildView
显示可选项目列表(示例中为 2 个项目),并在出现时加载列表。
问题是ChildView
当我点击任何行时,内容会重置为其原始值(示例中的 1 项)。
我试图使我的代码尽可能紧凑。
struct MainView: View {
@ObservedObject var model = MainViewModel()
var body: some View {
NavigationView {
ChildView().environmentObject(self.model)
}
}
}
class MainViewModel: ObservableObject {
@Published var selection = Set<Stuff>()
var formatted: String {
return "\(self.selection.count)"
}
}
struct ChildView : View {
@ObservedObject var cm = ChildViewModel()
@EnvironmentObject var model: MainViewModel
var body: some View {
VStack(spacing: 0) {
List(cm.demoData, id: \.self, selection: $model.selection) { stuff in
Text("\(stuff.value)")
}
.environment(\.editMode, .constant(EditMode.active))
.onAppear(perform: cm.load)
}
}
}
class ChildViewModel : ObservableObject {
@Published var demoData: [Stuff] = [Stuff(id: 1, value: "1")]
func load() {
self.demoData = [Stuff(id: 1, value: "1"), Stuff(id: 2, value: "2")]
}
}
struct Stuff : Identifiable, Equatable, Hashable {
var id: Int
var value: String
}
如果我不使用环境对象没有问题,但不知道如何导致列表重置。