协议和通用方法快速列表

时间:2020-05-06 06:51:42

标签: swift

我有一个描述视图列表的结构

struct A<T: View> {
   let view: T.Type
}

struct B<???> {
    let items: [A<???>]
}

并希望通过以下方式描述该应用

let content = [
    B(items: [
         A(view: View1.self),
         A(view: View2.self)
    ])
]

B的通用类型是什么?我能以某种方式使其工作吗?就像在Java中将view声明为View一样。

2 个答案:

答案 0 :(得分:1)

您只需要这个:

struct A<T: View> {
   let view: T
}

struct B<T: View> {
    let items: [A<T>]
}
let content = [
    B(items: [
         A(view: View1),
         A(view: View2)
    ])
]

答案 1 :(得分:1)

我敢打赌,您不只是在使用元类型。如果是,则将元类型内置到类型中。您不需要存储它:

struct A<View: SwiftUI.View> { }

struct B<View: SwiftUI.View> {
  let items: [A<View>]
}

struct View: SwiftUI.View {
  var body: some SwiftUI.View {
    Text("?⚔️")
  }
}

let content = [
  B<View>(items: [A(), A()])
]

否则,请使用科学怪人的答案。 ⚡️