【发布时间】:2021-11-01 03:19:27
【问题描述】:
我需要创建符合 ObservableObject 协议的类的 Array 属性。因为我要将它与过滤器、排序等一起使用 - 从表中选择记录以显示在列表视图中
class SQS_Record: NSObject, ObservableObject {
@Published final var __idx: Int = -1
}
class Project: SQS_Record {
@objc dynamic var name: String = "" { willSet { objectWillChange.send() } }
}
class SQS_Table<RecordType: SQS_Record>: ObservableObject {
@Published var records = [RecordType]()
var rcount: Int {
return records.count
}
subscript (index: Int) -> RecordType {
get {
return records[index]
}
set(item) {
records[index] = item
}
}
Let projectsTbl = SQS_Table<Project>(...)
struct ProjectsListView: View {
// This is ERROR line - below
@StateObject private var itemsList = projectsTbl.records.sorted { $0.__idx < $1.__idx }
var body: some View {
NavigationView {
List() {
// Список
ForEach (itemsList, id: \.__id) { (proj: Project) in
ProjectElement(project: proj)
}
.onMove(perform: moveItem )
.onDelete(perform: delItem )
}
…
}
错误:通用结构 'StateObject' 要求 '[Project]' 符合 'ObservableObject'
【问题讨论】:
-
我认为
@State在这种情况下应该可以工作。 -
或者添加一个保存数组的视图模型类
-
数组不符合
ObservableObjects你必须一次观察单个项目与整个数组 -
@FetchRequest 是此类集合的一个示例 - 一个持有人中的一些项目 - 每个项目的更改都显示在持有人中
-
要查看
@FetchRequest中各个项目的更改,请将它们包装在@ObservedObject中。您不会自己看到更改
标签: arrays swift swiftui observableobject