我可以做一个静态列表,比如
List {
View1()
View2()
}
但是如何从数组中创建元素的动态列表呢?
我尝试了以下但出现错误:包含控制流语句的闭包不能与函数生成器“ViewBuilder”一起使用
let elements: [Any] = [View1.self, View2.self]
List {
ForEach(0..<elements.count) { index in
if let _ = elements[index] as? View1 {
View1()
} else {
View2()
}
}
}
有解决办法吗?
我想要完成的是一个包含非静态输入的动态元素集的列表。
看起来答案与将我的视图包裹在其中有关AnyView
struct ContentView : View {
var myTypes: [Any] = [View1.self, View2.self]
var body: some View {
List {
ForEach(0..<myTypes.count) { index in
self.buildView(types: self.myTypes, index: index)
}
}
}
func buildView(types: [Any], index: Int) -> AnyView {
switch types[index].self {
case is View1.Type: return AnyView( View1() )
case is View2.Type: return AnyView( View2() )
default: return AnyView(EmptyView())
}
}
}
有了这个,我现在可以从服务器获取视图数据并组合它们。此外,它们仅在需要时才会被实例化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)