在SwiftUI视图中的另一个ForEach中执行ForEach会产生意外的结果-就像它们在彼此的计数器上踩脚一样。目前尚不清楚。我需要显示多分支数组,并尝试了多种变体,但仍然遇到相同的问题
我有几个项目已经完成。尝试使用范围(0 ..
这只是一个beta问题还是我缺少什么?我已经包含了一个演示该问题的示例项目。
使用XCode 11 Beta(11M392r)
谢谢!
import SwiftUI
struct ContentView: View {
let topTier:[String] = ["Apple", "Banana", "Cherry"]
let nextTier:[String] = ["Abalone", "Brie", "Cheddar"]
var body: some View {
List {
ForEach (topTier.indices, id: \.self) { a in
Text(self.topTier[a])
ForEach (self.nextTier.indices, id: \.self) { b in
Text(self.nextTier[b]).padding(.leading, 20)
}
}
}
}
}
在最合适的ForEach上抛出“对成员'索引'的模糊引用”。
如果对内部ForEach进行注释,则可以显示水果 如果对外部ForEach进行评论,则可以显示奶酪
我希望它显示: 苹果 鲍鱼 布里干酪 切达 香蕉 鲍鱼 布里干酪 切达 樱桃 鲍鱼 布里干酪 切达干酪
答案 0 :(得分:4)
在此Beta周期中,由于@ViewBuilder
的新SwiftUI
语法带来的许多错误,“模棱两可的引用…”消息是一条红色鲱鱼。您的问题是ForEach
闭包需要一个视图,而不是视图构建器。
您只需将ForEach
闭包的主体包装在Group
中即可使视图工作,就像这样:
import SwiftUI
struct ContentView: View {
let topTier:[String] = ["Apple", "Banana", "Cherry"]
let nextTier:[String] = ["Abalone", "Brie", "Cheddar"]
var body: some View {
List {
ForEach (topTier.indices, id: \.self) { a in
Group {
Text(self.topTier[a])
ForEach (self.nextTier.indices, id: \.self) { b in
Text(self.nextTier[b]).padding(.leading, 20)
}
}
}
}
}
}
还有,瞧!
答案 1 :(得分:2)
不确定我是否完全理解您的问题,但是我遇到了类似的,可能相关的问题。 SwiftUI Nested ForEach causes unexpected ordering
我收到一个回答,指出每个单元格需要一个不同的标识符,这也可能是您遇到的问题。
每次执行嵌套的ForEach
时,生成的id
都是相同的,从而导致存在许多具有相同ID的单元格,从而导致意外的重新排序等出现。在链接的文章中,您可以看到我如何解决此问题。
摘要:每个单元格都需要一个唯一的ID ,如您在此屏幕截图中所见,其中第7和8节中的每个单元格都有不同的ID。