Перебор нескольких массивов с ForEach SwiftUI - PullRequest
1 голос
/ 03 февраля 2020

Структура ForEach в swiftUI действительно полезна для перебора массива для создания представлений, но мне интересно, есть ли способ перебирать несколько массивов одновременно. Я знаю, что если вы используете zip, когда вы используете for в l oop, вы можете добиться этого следующим образом:

for (height, label) in zip(heights, labels) {
print("\(height) : \(label)")}

Однако мне интересно, возможно ли это сделать с помощью ForEach. Я пытался, но я не могу понять это правильно. Единственный способ, который я нашел для итерации по двум массивам, - это использовать индекс для индексации каждого массива, но это не кажется достаточно быстрым.

То, что я до сих пор пробовал, это:


let heights:[CGFloat] = [20, 40, 100, 5, 70, 80, 30]
let labels = ["mon", "tue", "wed", "thu", "fri", "sat", "sun", ]

ForEach(zip(heights, labels), id: \.self) { (height, label) in
                    Text("\(height)")
                    Text(label)
                }

Но не радость, и ошибки swiftUI такие же криптовые c, как и раньше ..... Любые указатели с благодарностью получены.

Редактировать: Один из способов получить его Работа, которую я нашел, заключается в создании вложенного ForEach, например:

ForEach(self.heights, id: \.self) { height in
                    Group {
                        Text("\(height)")
                        ForEach(self.labels, id: \.self) { label in

                            Text(label)
                        }
                    }
                }

Но, опять же, это не кажется очень быстрым.

1 Ответ

3 голосов
/ 03 февраля 2020

Здесь возможен подход (проверено и работало с Xcode 11.3.1)

ForEach(Array(zip(heights, labels)), id: \.0) { item in
    VStack {
        Text("\(item.0)")
        Text(item.1)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...