【发布时间】:2019-11-12 11:20:40
【问题描述】:
我正在尝试在 SwiftUI 中创建一个 动态分组列表,我遇到了一个问题,如果我更改标记为内部 ForEach 的 @Published 的集合除非我转到不同的屏幕/工作表,否则该更改在 UI 中不可见。我不明白我所做的是正确还是错误的错误,关于“SwiftUI 中的动态分组列表”主题的资源非常有限,所以我希望你能指出我正确的方向。
这是我的设置:
型号:
class Product: Identifiable, ObservableObject {
let id = UUID()
var name: String
init(name: String) {
self.name = name
}
}
class Category: Identifiable, ObservableObject {
let id = UUID()
@Published var items = [Product]()
var categoryName = ""
}
class Categories: ObservableObject {
@Published var items = [Category]()
}
和视图
struct ProductListView: View {
@ObservedObject var categories: Categories = Categories()
var body: some View {
List {
ForEach(categories.items) { category in
Section(header: Text(category.categoryName)) {
ForEach(category.items) { item in
Text(item.name)
}
}
}
}
.listStyle(GroupedListStyle())
}
func appendProduct() {
let product = Product(name: self.$name.wrappedValue, quantity: 1, complated: false)
let basicCategory = "Generic"
let existingCategory = self.categories.items.filter({$0.categoryName == basicCategory}).first
if (existingCategory?.items != nil) {
// Changes here do not refresh the UI
existingCategory?.items.append(product)
} else {
let category = Category()
category.categoryName = basicCategory
category.items.append(product)
self.categories.items.append(category)
}
}
}
当我附加到 Category (existingCategory?.items.append(product)) 的项目时,UI 不会更新,除非我通过导航或使用 .sheet() 进入不同的视图
有人知道这里有什么问题吗?我对 Swift 和 SwfitUI 很陌生。
【问题讨论】:
-
我不认为你可以在另一个
ObservableObject中拥有一个ObservableObject.. 也许先尝试一下