如何确保传递给视图的实体符合协议?



我有一个视图,它可以接受几个不同的NSManagedObject类型作为输入。这些类中的每一个都有一个返回值的函数。我希望能够将这些类中的任何一个传递给视图并使用此函数。因此,我认为我需要强制传递的对象符合协议。

下面是我试图做的一个简化的例子。类A和类B有相同的函数getInt(),我想在视图中使用该函数。
extension ClassA: returnsInt {
func getInt() -> Int {
return 1
}
}
extension ClassB: returnsInt {
func getInt() -> Int {
return 1
}
}
protocol returnsInt {
func getInt() -> Int
}
struct RandomView: View {

@ObservedObject var entity: // NSManagedObject that conforms to the returnsInt protocol
var body: some View {

Text(entity.getInt())
}
}

您可以将视图设置为泛型

struct RandomView<Entity: NSManagedObject & returnsInt>: View {
@ObservedObject var entity: Entity
var body: some View {
Text("(entity.getInt())")
}
}

最新更新