10

在 SwiftUI 视图中的另一个 ForEach 中执行 ForEach 会产生意想不到的结果 - 几乎就像他们踩着彼此的计数器一样。不清楚发生了什么。我需要显示多分支数组并尝试了多种变体,但一直遇到同样的问题

我有几个项目出现了这种情况。尝试使用范围 (0..

这只是一个测试版问题还是我错过了什么?我已经包含了一个演示该问题的示例项目。

使用 XCode 11 测试版 (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 被评论它可以显示奶酪

我希望它显示: 苹果鲍鱼布里切达干酪 香蕉鲍鱼布里切达干酪 樱桃鲍鱼布里切达干酪

4

2 回答 2

15

@ViewBuilder与此 beta 周期中新语法产生的许多错误一样,SwiftUI“不明确的引用……”消息是一条红鲱鱼。您的问题是ForEach闭包需要一个视图,而不是视图构建器。

您可以通过简单地将ForEach闭包的主体包装在 a中来使您的视图正常工作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)

                    }
                }
            }
        }
    }
}

瞧:

在此处输入图像描述

于 2019-09-10T00:58:39.573 回答
2

不确定我是否完全理解您的问题,但我有一个类似的、可能相关的问题。 SwiftUI Nested ForEach 导致意外排序

我收到一个答案,指出每个单元格都需要不同的标识符,这也可能是您的问题。

每次ForEach执行嵌套时,id生成的 ' 都是相同的,这导致存在许多具有相同 ID 的单元格,从而出现意外的重新排序等。在链接的帖子中,您可以看到我是如何解决这个问题的。

摘要:每个单元格都需要一个唯一的 ID,正如您在此屏幕截图中看到的那样,第 7 节和第 8 节中的每个单元格都有不同的 ID。

于 2020-07-17T08:08:48.353 回答