【发布时间】:2020-10-25 00:14:52
【问题描述】:
我有一个简单的字典,如下所示:
let testDict = [
"a": "apple",
"b": "banana",
"c": "cherry"
]
要在视图中呈现它,使用来自SwiftUI iterating through dictionary with ForEach 的答案,我使用:
ForEach(testDict.sorted(by: >), id: \.key) { key, value in
Text(value)
}
而且效果很好。我现在想根据SwiftUI: ForEach filters boolean 使用if 块过滤列表。但是,如果我尝试包含if 块:
ForEach(testDict.sorted(by: >), id: \.key) { key, value in
if key != "b" {
Text(value)
}
}
XCode 似乎挂起(只是需要很长时间)并最终放弃了这些消息:
Command CompileSwift 失败,退出代码非零
编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式
在 ContentView 结构的最后。这不是很有帮助,我不明白为什么 XCode 需要这么长时间才能放弃。
如何在ForEach 中包含if 块?
我在现实生活中,字典来自 CoreData 模型,但上面的示例给出了同样的问题。
我正在 XCode 12.1 上开发,目标是 MacOS 10.15
更新
此后我在以下方面取得了成功:
ForEach(testDict.filter({$0.key != "b"}).sorted(by: >), id: \.key) { key, value in
Text(value)
}
【问题讨论】:
-
我试过这段代码,它对我来说非常好。我正在使用 Xcode
Version 12.2 beta 3。您给出的这个简单示例是否可以独立运行? -
@George_E 我已经将样本放到 Playground 中,它立即给了我错误
Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols。
标签: xcode macos if-statement foreach swiftui