我的iBook on "The Swift Programming Language"包含以下有关在if
语句中强制解包的功能示例:
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
if convertedNumber {
println("\(possibleNumber) has an integer value of \(convertedNumber!)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// prints "123 has an integer value of 123”
但这不适合我。 Xcode(6.0.1)要求我明确地与<{p>}中的nil
进行比较
if (convertedNumber != nil) {
println("\(possibleNumber) has an integer value of \(convertedNumber!)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
我的iBook错了吗?
答案 0 :(得分:6)
是的,这是错的,或者更好,它已经过时了。行为在2014年4月8日发布时已更改,您可以看到更改日志here。相关部分:
Optionals在有值时不再隐式评估为
true
,而在不具有值时不再隐式评估,以避免在使用可选的Bool
值时出现混淆。相反,使用==
或!=
运算符对nil进行显式检查,以确定可选项是否包含值。
话虽如此,你可以删掉括号
if convertedNumber != nil {
...
}