SwiftUI ForEach字典发现问题

时间:2019-06-20 15:07:44

标签: swiftui

使用下面的给定代码,我尝试遍历字典wordList,该字典因问题Instance method 'identified(by:)' requires that '(key: Int, value: [String : String])' conform to 'Hashable'而失败。

所以我的猜测是我必须以某种方式将协议Hashable应用于字典的Int,或者可能存在另一种涉及.identified(by:)

非常感谢您的帮助!

struct ContentView: View {
    @State var wordOrder = ["DE", "EN"]

    let wordList: [Int: [String: String]] = [
        0: [
            "DE": "Hallo Welt",
            "EN": "hello world"
        ],
        1: [
            "DE": "Tschüss",
            "EN": "goodbye"
        ],
        2: [
            "DE": "vielleicht",
            "EN": "maybe"
        ]
    ]

    var body: some View {
        Group {
            NavigationView {
                List() {
                    ForEach(wordList.identified(by: \.self)) { wordListEntry in
                        let lang1 = wordListEntry[wordOrder[0]]
                        let lang2 = wordListEntry[wordOrder[1]]
                        WordRow(lang1, lang2)
                    }
                }
                .navigationBarTitle(Text("Alle Wörter"))
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

您似乎误会了。根据您发布的代码,我想您认为对字典进行迭代会对字典中的值进行迭代。但这不是字典迭代的工作方式。

遍历字典时,您会收到。每对包含一个键和字典中的相应值。在您的代码中,wordListEntry的类型为(key: Int, value: [String: String]),这对货币对的第一个元素为类型{{1}的key,第二个元素为类型{的Int {1}}。

我认为您只想遍历字典的键,然后在value正文中查找相应的值,就像这样:

[String: String]

答案 1 :(得分:0)

针对最新的 Swift UI 进行了更新:

emailRefreshPlanning(){

    this.refreshPlanningService.downloadTrnMail().subscribe(response => {

        const blob = new Blob([response], {type: "application/octet-stream;charset=UTF-8"});
        fileSaver.saveAs(blob, "trnMiniDataRefreshTemplate.oft");
      });
  }