【问题标题】:Convert For into ForEach loop in SwiftUI在 SwiftUI 中将 For 转换为 ForEach 循环
【发布时间】:2021-10-13 17:00:20
【问题描述】:

我在转换时遇到问题

for(key, value) in Array(self.categoriesList.subCategoryList).sorted(by: {$0.0 < $1.0}){

}

ForEach(){response in

}

原因是“SwiftUI”的“ViewBuilder”中不允许第一个 for 循环,所以我尝试了这个,但仍然没有运气。有什么指导吗?到目前为止,我已经尝试过了,但我得到了一个错误代码

在 'ForEach' 上引用初始化程序 'init(_:id:content:)' 要求 '[Int : [Int : String]]' 符合 'RandomAccessCollection'

我正在尝试 for 循环的字典就是这个。

self.categoriesList.subCategoryList = Dictionary<Int,Dictionary<Int,String>>()

ForEach (self.categoriesList.subCategoryList, id: \.self){subCategory in

}

【问题讨论】:

  • 这不是我们在这里展示代码的方式。
  • 您想从字典、值(内部字典)还是整个字典中显示什么?另外,如果这个字典来自 json 数据,那么使用 Codable 可能会更好
  • 根据您对上述问题的回答,您或许可以这样做:ForEach (self.categoriesList.subCategoryList.map { ($0, $1) }, id: \.1){ (key, value) in
  • @jnpdx 你成功了!像魅力一样工作。我也将这种方法用于嵌套的 for 循环。太感谢了!我怎样才能批准您的回答作为我问题的解决方案?
  • @JuanColmenero 我已将其添加为实际答案。您可以使用绿色复选标记将其标记为正确。谢谢。

标签: arrays swift sorting dictionary swiftui


【解决方案1】:

如果您希望在您的 ForEach 中获得 key value 对,您可以执行以下操作:

ForEach (self.categoriesList.subCategoryList.map { ($0, $1) }, id: \.1){ (key, value) in

它在原始Dictionary 上使用map 将其拆分为键/值对。

【讨论】:

  • 由于您在评论线程中提到这解决了您的问题,您可以用绿色复选标记将其标记为正确。