我需要测试一个返回可选值的表达式是否为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
。在这种情况下,将!= nil
推到块后面会使块的布尔比较与if的布尔比较混合。使用通配符模式并不那么令人惊讶或不寻常。它们用于元组
(x, _) = (10, 20)
、for-in循环for _ in 1...5
、case语句case (_, 0):
等等(注意:这些示例取自《Swift编程语言》)。
这个问题关乎两种形式的功能等效性,而不是关于编码样式选择的问题。这个讨论可以在programmers.stackexchange.com上进行。
经过这么长时间,Swift 2.0使其无关紧要了。
if self?.checklists.contains({ $0 === note.object }) ?? false {
…
}