Как отобразить многомерный массив? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть 2d массив с пользовательскими типами.

Я бы хотел сделать что-то вроде:

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

Основная проблема у меня заключается в том, что я не могу понять, как получить x.index.

Ответы [ 3 ]

1 голос
/ 11 июня 2019

На самом деле пример RPatel99 постет в предыдущем ответе прекрасно работает для меня:

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

Но была ли это ваша проблема?

1 голос
/ 11 июня 2019

Итак, я собирался сказать, что вы должны сделать это для итерации 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)")
    }
}

но бета-версия XCode 11 по-прежнему очень глючная с 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)")
    }
}

Что выглядит так:

0 голосов
/ 12 июня 2019
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)")
          }
        }
      }
    }
  }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...