Swiftui 如何显示多维数组?

Swiftui 如何显示多维数组?,swiftui,Swiftui,我有一个自定义类型的二维数组 我想做一些类似的事情: HStack { ForEach(2dArray) { x in VStack { ForEach(self.2dArray[x.index]) { y in 我遇到的主要问题是,我不知道如何获取x.index。所以我想说,您应该这样做来迭代2D数组: var data = [[1,2,3],[4,5,6],[7,8,9]] ForEach(data.identified(by: \.sel

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

我想做一些类似的事情:

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

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

所以我想说,您应该这样做来迭代2D数组:

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)")
    }
}
但是Xcode11Beta在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 poset对我来说很好:

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)")
          }
        }
      }
    }
  }
}

哦…好的。我想我在跟随;我将尝试实现这一点。非常感谢。没问题!正如mimo所说,您可能想看看不适合我的代码是否适合您,因为Xcode 11的buggy编译器可以根据具体情况给出错误。如果它不起作用,那么你应该走丑陋的功能路线,至少直到你可以在苹果开始发布Xcode 11更新时清理它。谢谢你的信息!但这篇文章作为对我答案的评论可能比作为一个单独的答案更好。它很有效。我只需要将self.2dArray[x.index]更改为我从第一个ForEach获得的数组。2使我的类型能够使用hashable.self。谢谢你的帮助!谢谢事实上,我想把它作为一个评论,但还不能做评论
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)")
          }
        }
      }
    }
  }
}