【问题标题】:Is it possible to iterate a dictionary inside ForEach in SwiftUI?是否可以在 SwiftUI 的 ForEach 中迭代字典?
【发布时间】:2020-12-27 15:26:56
【问题描述】:

我正在尝试从 SwiftUI 中的视图中的 viewModel 迭代 @Published 字典。我收到一条错误消息:

Initializer 'init(_:id:content:)' 要求 'Dictionary.Keys' 符合 'RandomAccessCollection'

如何在 ForEach 中迭代字典?这是我的代码:

ForEach(viewModel.userDomains.keys.indices, id: \.self) { index in
    VStack {
        DomainOfInterestElement(isActive: self.$isActive, domain: self.viewModel.userDomains.keys[index].name)
        if index != self.viewModel.domains.count - 1 {
            Divider().padding(.bottom, 12)
        }
    }
}.padding([.trailing, .leading], 12)

【问题讨论】:

  • 也许您的视图模型应该公开一个数组。

标签: swift foreach swiftui


【解决方案1】:

这是因为字典是无序的。所以它的键也是无序的。

您需要使用Array 对其进行排序:

ForEach(Array(viewModel.userDomains.keys).indices, id: \.self) { ...

由于它们是随机排序的,您可能还需要对它们进行排序:

ForEach(Array(viewModel.userDomains.keys).sorted().indices, id: \.self) { ...

但随着排序和排序变得越来越复杂,您可能会考虑将逻辑移至ViewModel。

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 2017-12-06
    • 2014-10-03
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多