用于列出视图SwiftUI的字典数组

时间:2019-10-10 19:27:14

标签: dictionary swiftui

我想用SwiftUI在列表视图中填充一系列字典。

我过去曾经使用过循环,但是由于在View中是不可能的,因此我被困在做什么方面。我可以通过下面的代码获得部分结果。

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 个答案:

答案 0 :(得分:1)

这就像键值的部分,对吧?

就像这样:

这是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处理,或使用其他数据结构,例如classstruct而不是普通的字典。