使用下面的给定代码,我尝试遍历字典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"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
看来您有误会。根据您发布的代码,我想您认为对字典进行迭代会对字典中的值进行迭代。但这不是字典迭代的工作方式。
遍历字典时,您会收到对。每对包含一个键和字典中的相应值。在您的代码中,wordListEntrytype为(key: Int, value: [String: String]),一对第一个元素为keytype Int,第二个元素为valuetype [String: String]。
我认为您只想遍历字典的键,然后在ForEach正文中查找相应的值,如下所示:
ForEach(wordList.keys.sorted().identified(by: \.self)) { key in
let lang1 = wordListEntry[wordOrder[0]]
let lang2 = wordListEntry[wordOrder[1]]
return WordRow(lang1, lang2)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |