有没有办法遍历 Dictionary
在 ForEach
环形? Xcode 说
Generic struct 'ForEach' requires that '[String : Int]' conform to 'RandomAccessCollection'
那么有没有办法让 Swift Dictionaries 符合
RandomAccessCollection
,或者这是不可能的,因为字典是无序的?我尝试过的一件事是迭代字典的键:
let dict: [String: Int] = ["test1": 1, "test2": 2, "test3": 3]
...
ForEach(dict.keys) {...}
但是
keys
不是 String
的数组s,它的类型是Dictionary<String, Int>.Keys
(不确定何时更改)。我知道我可以编写一个辅助函数,它接受字典并返回一个键数组,然后我可以迭代该数组,但是没有内置的方法来做到这一点,或者更优雅的方法?我可以延长Dictionary
并使其符合RandomAccessCollection
或者其他的东西?
最佳答案
简单的回答:没有。
正如您正确指出的那样,字典是无序的。 ForEach 监视其集合的变化。这些更改包括插入、删除、移动 和更新。如果发生任何这些更改,将触发更新。引用:https://developer.apple.com/videos/play/wwdc2019/204/在 46:10:
A ForEach automatically watches for changes in his collection
我建议你看演讲:)
您不能使用 ForEach,因为:
UITableView
在单元格可以回收时重用单元格, List
由 UITableViewCells
支持,我认为 ForEach
正在做同样的事情),它需要计算要显示的单元格.它通过从数据源查询索引路径来实现。从逻辑上讲,如果数据源是无序的,那么索引路径是没有用的。 关于SwiftUI 使用 ForEach 遍历字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675532/