从方法更新SwiftUI列表



请考虑以下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

相关内容

  • 没有找到相关文章

最新更新