Массив словарей для просмотра списка SwiftUI - PullRequest
1 голос
/ 10 октября 2019

У меня есть массив словарей, которые я хотел бы заполнить в виде списка с помощью SwiftUI.

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

struct Test : View {
let dict = csvArray[0]

var body: some View {
    let keys = dict.map{$0.key}
    let values = dict.map {$0.value}

    return List {

        ForEach(keys.indices) {index in
            HStack {
                Text(keys[index])
                Text("\(values[index])")
            }
        }
    }
}
}

Я пытаюсь проиндексировать весь массив словарей и добавить их в список, а не только в csvArray [0].

1 Ответ

1 голос
/ 10 октября 2019

Это похоже на разделы ключевых значений, верно?

Так вот как:

Это пример csvArray, это может быть что угодно, но вы должны обновить остальныекод дуэт к исходному типу данных

let csvArray = [
    [ "section0-key0": "section0-value0",
      "section0-key1": "section0-value1"],

    [ "section1-key0": "section1-value0",
      "section1-key1": "section1-value1"],

    [ "section2-key0": "section2-value0",
      "section2-key1": "section2-value1"]
]

Это ваш код для одного словаря. но вместо этого будет жестко закодирован этот словарь:

struct SectionView : View {
    @State var dict = [String: String]()

    var body: some View {
        let keys = dict.map{$0.key}
        let values = dict.map {$0.value}

        return  ForEach(keys.indices) {index in
            HStack {
                Text(keys[index])
                Text("\(values[index])")
            }
        }
    }
}

И это построитель списка, связанный с исходным массивом. Я использовал разделы для значимости структуры данных.

struct ContentView: View {
    var body: some View {
        List {
            ForEach(csvArray, id:\.self) { dict in
                Section {
                    SectionView(dict: dict)
                }
            }
        }
    }
}

Обратите внимание, что вы не можете передать порядок значения ключа в словаре. Поэтому я предлагаю вам сделать sort перед заполнением списка или использовать другую структуру данных, например class или struct вместо простого словаря.

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