当尝试使用泛型类型初始化/添加视图到另一个SwiftUI视图时,我得到错误Type 'T' has no member 'init'
。如何解决这个问题?
我想问题是,View
只是一个协议,只需要一个body
属性,仅此而已。但是可以使用什么类型呢?
简单示例:
尝试使用TrippleView<T: View>
,它应该创建/显示三个T
类型的视图。添加视图(RedRectView
或BlueCircleView
)没有问题。将这些视图作为泛型参数传递失败:
struct SomeView: View {
var body: some View {
TrippleView<RedRectView>()
TrippleView<BlueCircleView>()
}
}
struct TrippleView<T: View>: View {
var body: some View {
VStack {
// Does NOT work: Type 'T' has no member 'init'
T()
T()
T()
// Works fine
// RedRectView()
// BlueCircleView()
// RedRectView()
}
}
}
struct RedRectView: View {...}
struct BlueCircleView: View {...}
字符串
编辑:
当然,TrippleView
只是一个例子,我想像使用任何其他泛型类型一样使用泛型视图:在不同的场景中使用一个公共的基础“类型”。
例如,两个版本的列表视图使用通用的CellView
以两种不同的样式/布局显示相同的数据。
2条答案
按热度按时间fivyi3re1#
你需要在你的结构中有一个ViewBuilder来初始化视图。这里有一个例子,
接受泛型视图并返回视图的结构。
字符串
或者你可以接受多个参数
型
在主视图中调用struct
型
的数据
2j4z5cfb2#
2024年1月更新
现在有一个视图构建器的属性 Package 器。所以你不需要编写初始化器。
字符串
型
型