小编nal*_*dad的帖子

如何在 SwiftUI 中实现像 AnyView 这样的类型擦除结构?

我很好奇AnyViewSwiftUI 中的默认实现。如何将具有不同泛型类型的结构放入协议数组中?

例如:

let a = AnyView(Text("hello"))
let b = AnyView(Image(systemName: "1.circle"))
let genericViews = [a, b] // No compile error
Run Code Online (Sandbox Code Playgroud)

而我的实现:

struct TypeErasedView<V: View>: View {
    private var _view: V
    init(_ view: V) {
        _view = view
    }
    var body: V {
        _view
    }
}

let a = TypeErasedView(Text("Hello"))
let b = TypeErasedView(Image(systemName: "1.circle"))
let genericViews = [a, b] // compile error

Run Code Online (Sandbox Code Playgroud)

编译错误将是“异构集合文字只能被推断为 '[Any]';如果这是有意的,请添加显式类型注释”。

有没有人有任何想法?

swiftui

8
推荐指数
2
解决办法
1564
查看次数

标签 统计

swiftui ×1