Context

我有一个通用的SwiftUI View,应该显示不同的元素取决于Generic Type.但是,我在下面的实现中得到了以下错误:

在作用域中找不到"$EntityA"


Code

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
        }
    }
}

Question

在我看来,当将特定的Entity绑定到一个常量时,它会失go 它的@ObservedObject修饰符,因此不能在TextFieldToggle中传递.

  • 我怎么才能解决这个问题呢?

推荐答案

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

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)
        }
    }
}

Ios相关问答推荐

什么是最好的方式使用DateFormatters在可扩展视图cellForRowAt方法

iOS SwiftUI需要不带箭头显示弹出窗口""

如何在iOS中以编程方式推送另一个页面?

如何从Windows PC在iPhone上安装Flutter 应用程序

如何在expo-react native中从ios平台中排除包

在flatter_riverpod中,如果没有ref对象,我们如何访问提供程序?

如何使用自定义数据源在本地react 本机 ios 应用程序中加载 Tradingview 小部件?

在 Swift 项目中使用情节提要加载 obj-c 文件

ionic 4 - 编译 ios - 来自项目Pods的目标GoogleDataTransport中的问题

占位符文本未显示在 TextEditor 上

具有线性渐变的 SVG textPath 在 Safari 中损坏

iOS 如何使用 Alamofire 解析 JSON 可编码数组

AppCenter 错误:/usr/bin/xcodebuild 失败,返回码:65

用溢出的长文本对齐 Flutter 中的行和列

如何将私钥添加到分发证书?

在 iOS 8 中显示相机权限对话框

如何在 iPhone 中为透明的 PNG 图像着色?

Xcode 11 向后兼容性:UIWindowScene 仅在 iOS 13 或更高版本中可用

无法加载从带有标识符的包中的笔尖引用的图像

未找到符号:kUTTypeImage