我有一个 SwiftUI 视图,其中传入了核心数据 NSManagedObject(没有 @FetchRequest),并且子视图需要显示来自第一个实体的一对多关系。在这种情况下,Person
传入了 a,我想显示Tags
与该 Person 的关联。
struct CJMapsCalloutView: View {
@ObservedObject var personAddress: PersonAddress
var body: some View {
VStack(alignment: .leading, spacing: 8.0) {
if let personTags = personAddress.person?.getSortedListOfAssignedTags() {
ContactTagsList(personTags: personTags)
}
}
}
联系人标签列表
struct ContactTagsList: View {
@State var personTags: [Tag]
var body: some View {
HStack(spacing: 0.0) {
ForEach(personTags) { (tag: Tag) in
ContactTag(personTag: tag)
}
.padding(.leading, 0).padding(.trailing, 2)
}
}
使用时@State
,它可以很好地显示标签列表,甚至对个人Tags
的更改也会自动反映在视图中。但是对“关系”的任何更改,无论是添加还是删除标签Person
,都不会导致视图更新。
我尝试使用@ObservedObject
而不是@State
for var personTags
,但这会在编译时出现错误:
属性类型“[Tag]”与其包装器类型“ObservedObject”的“wrappedValue”属性不匹配
我是 SwiftUI 的新手,所以我不确定使用 @ObservedObject 有什么问题。如果我不能使用它,处理这种情况以自动更新关系的最佳方法是什么?