gpt4 book ai didi

SwiftUI 使用 ForEach 遍历字典

转载 作者:行者123 更新时间:2023-12-04 16:42:04 29 4
gpt4 key购买 nike

有没有办法遍历 DictionaryForEach环形? 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,因为:
  • 它观察一个系列并监控运动。不可能用一本无用的字典。
  • 当重用 View 时(如 UITableView 在单元格可以回收时重用单元格, ListUITableViewCells 支持,我认为 ForEach 正在做同样的事情),它需要计算要显示的单元格.它通过从数据源查询索引路径来实现。从逻辑上讲,如果数据源是无序的,那么索引路径是没有用的。
  • 关于SwiftUI 使用 ForEach 遍历字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675532/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com