Swiftui foreach 内部参数
Posted
技术标签:
【中文标题】Swiftui foreach 内部参数【英文标题】:Swiftui foreach inside parameter 【发布时间】:2021-11-02 02:07:02 【问题描述】:如何在视图参数中进行foreach
这是我的代码
CarouselView(itemHeight: 124, views: [
SliderItemView(),
SliderItemView(),
SliderItemView(),
])
我想迭代并显示带有循环的 SliderItemView
【问题讨论】:
【参考方案1】:ForEach
无法创建数组。如果您想创建这些视图的数组,一种方法是[0..<3].map _ in SliderItemView()
【讨论】:
结果仍然只显示一个 SliderItemView() 您如何处理CarouselfView
内部的视图?您需要展示更多代码。
@ScottThompson:为什么不呢? ForEach
可用于重复视图!那里没有问题。在这种情况下,不需要视图数组,只需 ForEach 处理的内容。
ForEach
当然可以用于创建多个视图。但是ForEach
是一个struct 它不是一个Array。这正是我所说的。原始发帖人询问有关使用ForEach
创建多个视图的问题,并演示了在Array
中传递这些视图。 ForEach
无法做到这一点。
我从一开始就知道,但是你帮他走错了路,否则我会说你给出了正确的答案或错误的方式。我还提到了 OP 可能不需要或不应该使用视图数组。【参考方案2】:
这里有两种解决问题的方法:
struct ContentView: View
var body: some View
CustomViewV1(content:
ForEach(0...2, id:\.self) _ in Text("Hello, World!").foregroundColor(Color.blue)
)
CustomViewV2(repeating: 3, content: Text("Hello, World!").foregroundColor(Color.red) )
struct CustomViewV1<Content: View>: View
@ViewBuilder let content: () -> Content
var body: some View
return content()
struct CustomViewV2<Content: View>: View
let repeating: Int
@ViewBuilder let content: () -> Content
var body: some View
if (repeating >= 1)
ForEach(1...repeating, id:\.self) _ in
content()
结果:
【讨论】:
以上是关于Swiftui foreach 内部参数的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI ListView 没有访问 ForEach 循环
从 ForEach 中引用变量时,SwiftUI“无法推断通用参数'数据'”