【发布时间】:2015-03-28 21:44:32
【问题描述】:
我需要测试返回可选值的表达式是否为nil。这看起来很简单,但这里是代码。
if nil != self?.checklists.itemPassingTest({ $0 === note.object }) {
…
}
出于某种原因,这让我觉得很不舒服。
if let item = self?.checklists.itemPassingTest({ $0 === note.object }) {
…
}
对我来说看起来好多了,但我实际上并不需要该物品,我只需要知道是否有退货。所以,我使用了以下内容。
if let _ = self?.checklists.itemPassingTest({ $0 === note.object }) {
…
}
我在这里错过了什么微妙的东西吗?我认为if nil != optional … 和if let _ = optional … 在这里是等价的。
更新以解决答案中的一些问题
我看不出
nil != var和var != nil之间的区别,尽管我通常使用var != nil。在这种情况下,在块获得块的布尔比较与 if 的布尔比较混合后推送!= nil。Wildcard Pattern 的使用不应该是那么令人惊讶或不常见。它们用于元组
(x, _) = (10, 20)、for-in 循环for _ in 1...5、case 语句case (_, 0):等(注意:这些示例取自The Swift Programming Language)。
这个问题是关于两种形式的功能等效性,而不是关于编码风格的选择。可以在programmers.stackexchange.com 上进行对话。
经过这么长时间,Swift 2.0 让它变得毫无意义
if self?.checklists.contains({ $0 === note.object }) ?? false {
…
}
【问题讨论】: