ios 如何在SwiftUI中切换Generic @ObservedObject?

z4bn682m  于 2023-05-23  发布在  iOS
关注(0)|答案(1)|浏览(108)

上下文

我有一个通用的SwiftUI View,它应该根据Generic Type显示不同的元素。然而,我在下面的实现中得到了以下错误:
在作用域中找不到“$entityA”

编码

class EntityA: Entity, NSManagedObject {
    @NSManaged var name: String
}

class EntityB: Entity, NSManagedObject {
    @NSManaged var isOn: Bool
}

struct RootView<E: Entity>: View {
    @ObservedObject var entity: E
    
    var body: some View {
        switch entity {
            case let entityA as EntityA:
                TextField("Name", text: $entityA.name) // Error
            case let entityB as EntityB:
                Toggle("Enabled", isOn: $entityB.isOn) // Error
        }
    }
}

问题

在我看来,当将特定的Entity绑定到一个常量时,它失去了它的@ObservedObject修饰符,因此不能在TextFieldToggle内部传递。

  • 我该如何解决这个问题?
hts6caw3

hts6caw31#

您需要另一个子视图,在其中可以观察特定的实体。

struct EntityAView: View {
    @ObservedObject var entity: EntityA
    
    var body: some View {

         TextField("Name", text: $entity.name)
        }
    }
}



struct RootView<E: Entity>: View {
    @ObservedObject var entity: E
    
    var body: some View {
        switch entity {
            case let entityA as EntityA:
                EntityAView(entity: entityA)
            case let entityB as EntityB:
                EntityBView(entity: entityB)
        }
    }
}

相关问题