这段代码打印两次' false':
println(levelController?.died)
println(!levelController?.died)
我不明白为什么,levelController被实例化,并且在LevelController中声明了death属性,如下所示:
var died = false
有人可以告诉我,我可能做错了吗?
答案 0 :(得分:3)
您可以这样创建自己的not运算符:
let not = (!)
现在我们可以指定一个布尔值来对此进行测试:
let dead = false
if not(dead) {
print(dead)
// Code
} else {
// Code
}
答案 1 :(得分:1)
这是Swift,而不是目标C.
levelController?.died不是布尔值。它是可选布尔值。它可能是真的,假的,或者是零。第一个println打印错误。应用于可选项的逻辑非运算符如果optional不是nil则返回false,如果optional是nil则返回true。就像在应用于指针时在C中一样。
答案 2 :(得分:0)
作为一个完整的例子,您的代码:
class Controller {
var died: Bool = false
}
var levelController: Controller? = Controller()
println(levelController?.died)
println(!levelController?.died)
输出以下内容:
Optional(false)
false
代码的第一个版本levelController?.died
使用选项链接,展开levelController并访问died
属性。这解释了为什么输出为Optional(false)
。您通常会按如下方式使用它:
if let died = levelController?.died {
if (died) {
println("I died")
}
}
if-let
语句展开此可选值。
代码的第二个版本!levelController?.died
测试给定的可选值是否为nil。您会注意到将died
更改为true的假设没有任何区别。
但是,更改实例化如下:
var levelController: Controller? = nil
!levelController?.died
成为真的结果。这不是一个非常实用的代码片段!