在将SwiftUI和处理Core Data的通用类型组合在一起时遇到了困难。
考虑以下示例:
Parent
是抽象的。 Foo
和Bar
是Parent
的子类,它们具有一些自定义属性。
现在我想做的大致是:
protocol EntityWithView {
associatedtype T: View
func buildView() -> T
}
extension Parent: EntityWithView {
func buildView() -> some View {
fatalError("Re-implement in child")
}
}
extension Foo {
override func buildView() -> some View {
return Text(footribute)
}
}
extension Bar {
override func buildView() -> some View {
return Text(atrribar)
}
}
struct ViewThatUsesCoreDataAsModel: View {
let entities: [Parent]
var body: some View {
ForEach(entities) { entity in
entity.buildView()
}
}
}
我希望为我的核心数据实体添加多态构建器,以形成数据或构建视图,这些实体符合通用接口,因此我可以在不需要强制类型转换的情况下使用它们。
问题是,如果我尝试直接修改生成的核心数据实体而不是通过扩展进行修改,则编译器会抛出错误,而通过扩展确认协议不允许覆盖。