在swift中的可选if语句中幕后发生了什么

时间:2015-03-11 12:19:44

标签: swift optional

根据apple文档,下面的代码检查convertNumber是否已经初始化,如果是,则执行if块。

let convertedNumber: Int?

if convertedNumber {
//do stuff
}

我对幕后发生的事情很感兴趣。这是一种简写符号,因为if语句中的条件必须求值为布尔值true或false。 convertNumebr包含转换为true或false的值的事实是怎样的?

我在想这是一个简写符号:

if convertedNumber!=nil {
//do stuff
}
如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:3)

"速记测试"选项

if someOptional {
//do stuff
}

仅存在于Swift的早期版本中。 来自Xcode 6 beta 5发行说明:

  

Optionals不再符合BooleanType(以前的LogicValue)   协议,因此它们可能不再用于代替布尔值   表达式(必须与v!= nil明确比较)。这个   解决了Bool周围的困惑?和相关类型,使代码更多   明确了预期的测试,并且更符合   其余的语言。

因此,对于当前的Xcode版本,您必须使用

进行测试
if someOptional != nil {
//do stuff
}

,当然还有可选的绑定。

此外,struct Optional符合NilLiteralConvertible 协议,以便(在此上下文中)nil与...相同 匹配类型为Optional<T>.None的{​​{1}}。