SwiftUI如何将模型中[String:String]字典排序后渲染为List列表
问题修复方案
- 代码无法正常运行的核心原因是
ForEach遍历索引范围时没有指定id参数,SwiftUI要求非Identifiable类型的遍历序列必须显式指定唯一标识的路径。
原有写法修复
仅补充缺失的id参数即可正常运行:
var fw: Deck var body: some View { let sortedDict = fw.dictItems.sorted(by: <) let keys = sortedDict.map { $0.key } let values = sortedDict.map { $0.value } return List { // 补充id参数,用索引本身作为唯一标识 ForEach(keys.indices, id: \.self) { index in HStack { Text(keys[index]) Text("\(values[index])") } } } }
更简洁的优化写法
无需拆分出单独的key、value数组,直接遍历排序后的键值对即可,代码可读性更高:
var fw: Deck var body: some View { // 可根据需要调整排序规则,比如按value排序可改为sorted { $0.value < $1.value } let sortedItems = fw.dictItems.sorted(by: <) return List { // 用字典天然唯一的key作为遍历元素的id ForEach(sortedItems, id: \.key) { item in HStack { Text(item.key) Text(item.value) } } } }
内容的提问来源于stack exchange,提问作者onqun
相关产品推荐
相关产品推荐

