繁体   English   中英

如何添加 SwiftUI 某些视图类型作为协议的要求?

[英]How to add a SwiftUI some View Type as a Requirement to an Protocol?

语境

我有一个Protocol ,并希望它有一个SwiftUI some View Type作为其Requirements之一。 我知道,将ModelView混合可能不是最优雅的解决方案,但是,每次我想使用View时切换所有不同的符合Types也不是很漂亮。 尽管如此,我在实现时遇到了问题并得到了以下Compiler Error

'some' 类型不能是协议要求的返回类型; 您是要添加关联类型吗?


代码

protocol Component {
    var row: some View { get } // -> Compiler Error thrown in this Line.
}

// There are actually many more Types conforming to Component.
enum ComponentA: Component {
    var row: some View { 
        Text("Component A")
    }
}

struct ComponentsView: View {
    var body: some View {
        ForEach(components) { component in
            component.row
        }
    }
}

问题

如何实现我的目标,即只需定义一次选择合适的 SwiftUI 视图?

您可以遵循 Apple 用于View本身的相同技术,您可以通过 Command-单击 Xcode 中的View引用并选择Jump to Definition来查看。

protocol Component {
  associatedtype Body: View

  var row: Body { get }

当您声明某些对象与Component的一致性时, row自动完成将自动填充到some View

行方法的自动完成屏幕截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM