如何显示一个多维数组?

How to display a multi-dimensional array?

我有一个带有自定义类型的二维数组。

我想做类似的事情:

HStack {
    ForEach(2dArray) { x in
        VStack {
            ForEach(self.2dArray[x.index]) { y in

我遇到的主要问题是我不知道如何获取 x.index。

所以我想说你应该这样做来迭代一个二维数组:

var data = [[1,2,3],[4,5,6],[7,8,9]]

ForEach(data.identified(by: \.self)) { array in
    ForEach(array.identified(by: \.self)) { element in
        Text("\(element)")
    }
}

但是 XCode 11 beta 在 SwiftUI 和类型推断方面仍然存在很多问题,因此即使它应该可以工作,您也会遇到编译器错误。所以现在,您必须将所有内容分离到 XCode 编译器可以处理的函数中,但是对于 SwiftUI 使用的复杂类型,它会很快变得丑陋。这是一个例子:

var data = [[1,2,3],[4,5,6],[7,8,9]]

var body: some View {
    doubleForEach(data: data)
}
func doubleForEach(data: [[Int]]) -> ForEach<IdentifierValuePairs<[[Int]], [Int]>,ForEach<IdentifierValuePairs<[Int], Int>, Text>> {
    return ForEach(data.identified(by: \.self)) { row in
        self.foreach(dataArr: row)
    }
}
func foreach(dataArr: [Int]) -> ForEach<IdentifierValuePairs<[Int], Int>, Text> {
    return ForEach(dataArr.identified(by: \.self)) { data in
        Text("\(data)")
    }
}

看起来像这样:

实际上,早期回复中的示例 RPatel99 postet 对我来说很好用:

var data = [[1,2,3],[4,5,6],[7,8,9]]

struct ForTesting : View {
    var body: some View {
        VStack {
            ForEach(data.identified(by: \.self)) { array in
                ForEach(array.identified(by: \.self)) { element in
                    Text("\(element)")
                }
            }
        }
    }
}

但这就是你的问题吗?

struct ContentView : View {
  var body: some View {
    VStack {
      ForEach(data.identified(by: \.self)) { array in
        HStack{
          ForEach(array.identified(by: \.self)) { element in
            Text("\(element)")
          }
        }
      }
    }
  }
}

var data = [[1,2,3],[4,5,6],[7,8,9]]

struct ContentView : View {
  var body: some View {
    VStack {
      ForEach(data, id: \.self) { array in
        HStack{
          ForEach(array, id: \.self) { element in
            Text("\(element)")
          }
        }
      }
    }
  }
}