SwiftUI使用ForEach遍历字典
有没有办法循环遍历Dictionary
一个ForEach
?Xcode说
通用结构’ForEach’要求’[String:Int]’符合’RandomAccessCollection’
所以有没有办法使Swift字典符合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/
at 46:10:
ForEach自动监视其夹中的更改
我建议你看说话:)
您不能使用ForEach,因为:
- 它观看并监视动作。不可修改的字典无法使用。
- 当重用视图时(例如
UITableView
,可以回收单元的情况下重用单元,aList
支持UITableViewCells
,我认为aForEach
在做相同的事情),它需要计算要显示的单元。它通过查询数据源的索引路径来实现。从逻辑上讲,如果数据源是无序的,则索引路径是无用的。
以上是 SwiftUI使用ForEach遍历字典 的全部内容, 来源链接: utcz.com/qa/433822.html