请考虑以下swiftUI场景:
List {
ForEach(manager.items(filter: .all), id: .id) { item in
RowView(item: item)
}
}
其中CCD_ 1是经由CCD_ 2注入的环境对象。items()
方法返回根据过滤器参数提取的核心数据实体的数组。这对于突变元素很有效,但无论何时添加或删除元素,ForEach视图都不会得到通知(当然,因为它是一个函数返回,没有"绑定"等(。
最佳实践方法是什么来相应地更新列表?我能以某种方式包装函数调用吗?或者通知更改?任何小费都将不胜感激!
我不确定它在核心数据提取中的表现以及执行情况,但您可以尝试像这样绑定提取结果:
//...
private var items: Binding<[ItemType]> { Binding (
get: { self.manager.items(filter: .all) },
set: { _ in }
)}
var body: some View {
List {
ForEach(self.items, id: .id) { item in
RowView(item: item)
}
}
//...
或者:
List {
ForEach(self.items.wrappedValue, id: .id) { item in
RowView(item: item)
}
}
对于Swift 5.3,可以省略对self.
的引用。
Manager.items应标记为@Published。
https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-environmentobject-property-wrapper