当前位置: 首页 > 面试题库 >

SwiftUI使用ForEach遍历字典

蒯嘉赐
2023-03-14
问题内容

有没有办法循环遍历Dictionary一个ForEach?Xcode说

通用结构’ForEach’要求’[String:Int]’符合’RandomAccessCollection’

所以有没有办法使Swift字典符合RandomAccessCollection,或者因为字典是无序的,那是不可能的吗?

我尝试过的一件事是迭代字典的键:

let dict: [String: Int] = ["test1": 1, "test2": 2, "test3": 3]
...
ForEach(dict.keys) {...}

keys不是Strings 的数组,而是类型Dictionary<String, Int>.Keys(不确定何时更改)。我知道我可以编写一个辅助函数,该函数接受字典并返回键的数组,然后可以迭代该数组,但是没有内置的方法或更优雅的方法吗?我可以扩展Dictionary并使其符合要求RandomAccessCollection吗?


问题答案:

简单的回答:不。

正如您正确指出的那样,字典是无序的。ForEach监视他的收藏中的更改。此更改包括插入,删除, 移动
和更新。如果发生任何这些更改,将触发更新。参考:https://developer.apple.com/videos/play/wwdc2019/204/
at 46:10:

ForEach自动监视其收藏夹中的更改

我建议你看说话:)

您不能使用ForEach,因为:

  1. 它观看收藏并监视动作。不可修改的字典无法使用。
  2. 当重用视图时(例如UITableView,可以回收单元的情况下重用单元,a List支持UITableViewCells,我认为a ForEach在做相同的事情),它需要计算要显示的单元。它通过查询数据源的索引路径来实现。从逻辑上讲,如果数据源是无序的,则索引路径是无用的。


 类似资料:
  • 问题内容: 我可以在varArgs上使用还是在varArgs上使用? 问题答案: 变量参数的行为与数组相似,因此您可以使用来获取变量变量中的一个: 您可以使用以下方法遍历它们:

  • 需要帮助通过简单的HTML DOM解析器遍历DOM树。如果有人能花点时间来看看它是如何工作的,那么如果我能理解的话,知识渊博的PHP程序员应该能很快理解它。我陷入困境的地方是从我朋友的俄罗斯篮球网站上的一个部门那里得到文章。例如,以下是博客div的外观: 这就是我如何拉出单个“a”链接并显示它们的方法,但我想做的是获取所有链接的div标题,基本上对它们进行分类,而不是将所有内容都排成一行。我不知道

  • 《 Java Iterator遍历Collection集合元素》一节中主要讲解如何使用 Iterator 接口迭代访问 Collection 集合里的元素,除了这个方法之外,我们还可以使用 Java 5 提供的 foreach 循环迭代访问集合元素,而且更加便捷。如下程序示范了使用 foreach 循环来迭代访问集合元素。 输出结果为: 小牛知识库C++教程 小牛知识库C语言教程 小牛知识库Jav

  • 问题内容: 我有一个正在实例化并填充在后台线程上的代码(我用它来存储数据)。同时,可以在主线程上对其进行访问,并通过使用foreach对其进行迭代。因此,这显然可能导致引发异常。 我的问题是使此类类字段成为线程安全的而不每次都复制它或不使用标志的最佳实践是什么? 问题答案: 通常,对不是线程安全的数据结构进行并发操作是一个非常糟糕的主意。您无法保证将来的实现不会改变,这可能会严重影响应用程序的运行

  • 问题内容: 我有一个数组: 我想使用一个foreach循环来替换(仅允许我设置数字: 能够显示相关数组值的和类 编辑 我希望将数据回显为: 非常感谢您的快速回复。StackOverflow令人震惊! 问题答案:

  • 本文向大家介绍MongoDB数据库forEach循环遍历用法,包括了MongoDB数据库forEach循环遍历用法的使用技巧和注意事项,需要的朋友参考一下 MongoDB数据库forEach语句循环遍历功能是非常常用的一个功能。 采用foreach循环遍历,并每次循环允许执行一次回调函数。 此外,foreach循环遍历是for循环的一种扩展,对比同浏览器端的forEach用法是一致的。 示例如下: