排序字典上的ForEach:Xcode挂起带有if块的构建
我有一本简单的字典,如下所示:排序字典上的ForEach:Xcode挂起带有if块的构建,xcode,macos,if-statement,foreach,swiftui,Xcode,Macos,If Statement,Foreach,Swiftui,我有一本简单的字典,如下所示: 让testDict=[ “a”:“苹果”, “b”:“香蕉”, “c”:“樱桃” ] 要使用来自的答案在视图中渲染它,我使用: ForEach(testDict.sorted(by:>),id:\.key){key,中的值 文本(值) } 而且效果也很好。现在,我想根据使用if块筛选列表。但是,如果我尝试包含if块: ForEach(testDict.sorted(by:>),id:\.key){key,中的值 如果键!=“b”{ 文本(值) } } XCo
让testDict=[
“a”:“苹果”,
“b”:“香蕉”,
“c”:“樱桃”
]
要使用来自的答案在视图中渲染它,我使用:
ForEach(testDict.sorted(by:>),id:\.key){key,中的值
文本(值)
}
而且效果也很好。现在,我想根据使用if
块筛选列表。但是,如果我尝试包含if
块:
ForEach(testDict.sorted(by:>),id:\.key){key,中的值
如果键!=“b”{
文本(值)
}
}
XCode似乎挂起(只是需要很长时间),最终放弃了这些消息:
命令CompileSwift失败,退出代码为非零
编译器无法在合理时间内对此表达式进行类型检查;尝试将表达式拆分为不同的子表达式
在ContentView结构的最末端。这不是很有帮助,我不明白为什么XCode要花这么长时间才能放弃
如何在ForEach
中包含if
块
在现实生活中,字典来自CoreData模型,但上面的示例给出了相同的问题
我正在开发XCode 12.1,目标是MacOS 10.15
更新
此后,我在以下方面取得了成功:
ForEach(testDict.filter({$0.key!=“b”})。排序(按:>),id:\.key){key,中的值
文本(值)
}
您需要在ForEach内容中查看,所以请使用Group,如
ForEach(testDict.sorted(by: >), id: \.key) { key, value in
Group {
if key != "b" {
Text(value)
}
}
}
我试过这个代码,它对我来说非常好。我使用的是Xcode
版本12.2 beta 3
。你给的这个简单的例子本身有用吗?@George_E我把这个样本丢到了一个操场上,它立即给了我一个错误Type'()'不能与“View”一致;只有结构/枚举/类类型可以符合协议
。再次感谢您的帮助。这就解释了为什么if
在某些示例中有效,而在其他示例中无效。