Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:逻辑not运算符不工作_Swift - Fatal编程技术网

Swift:逻辑not运算符不工作

Swift:逻辑not运算符不工作,swift,Swift,这段代码打印两次“false”: println(levelController?.died) println(!levelController?.died) 我不明白为什么,levelController是实例化的,而Dead属性是在levelController中声明的,如下所示: var died = false 有人能告诉我我可能做错了什么吗?这是斯威夫特,不是客观的C levelController?不是布尔值。它是可选的布尔值。它可以是真的、假的,也可以是零。第一个println

这段代码打印两次“false”:

println(levelController?.died)
println(!levelController?.died)
我不明白为什么,levelController是实例化的,而Dead属性是在levelController中声明的,如下所示:

var died = false

有人能告诉我我可能做错了什么吗?

这是斯威夫特,不是客观的C


levelController?不是布尔值。它是可选的布尔值。它可以是真的、假的,也可以是零。第一个println打印为false。应用于可选项的逻辑not运算符,如果可选项不是nil,则返回false;如果可选项是nil,则返回true。正如它在C中应用于指针时所做的那样

这是迅速的,不是客观的


levelController?不是布尔值。它是可选的布尔值。它可以是真的、假的,也可以是零。第一个println打印为false。应用于可选项的逻辑not运算符,如果可选项不是nil,则返回false;如果可选项是nil,则返回true。正如它在C中应用于指针时所做的那样

作为一个完整的示例,您的代码:

class Controller {
  var died: Bool = false
}

var levelController: Controller? = Controller()

println(levelController?.died)
println(!levelController?.died)
产出如下:

Optional(false)
false
代码的第一个版本
levelController?.died
使用选项链接、展开levelController并访问
died
属性。这解释了为什么输出是可选的(false)。您通常会按如下方式使用它:

if let died = levelController?.died {
  if (died) {
    println("I died")
  }
}
var levelController: Controller? = nil
if let
语句打开此可选值

代码的第二个版本
!levelController?.died
测试给定的可选值是否为零。您会注意到,将
dead
更改为true或false没有任何区别

但是,将实例化更改如下:

if let died = levelController?.died {
  if (died) {
    println("I died")
  }
}
var levelController: Controller? = nil

结果是
!levelController?已死亡
变为真。这不是一段非常实用的代码

作为一个完整的示例,您的代码:

class Controller {
  var died: Bool = false
}

var levelController: Controller? = Controller()

println(levelController?.died)
println(!levelController?.died)
产出如下:

Optional(false)
false
代码的第一个版本
levelController?.died
使用选项链接、展开levelController并访问
died
属性。这解释了为什么输出是可选的(false)。您通常会按如下方式使用它:

if let died = levelController?.died {
  if (died) {
    println("I died")
  }
}
var levelController: Controller? = nil
if let
语句打开此可选值

代码的第二个版本
!levelController?.died
测试给定的可选值是否为零。您会注意到,将
dead
更改为true或false没有任何区别

但是,将实例化更改如下:

if let died = levelController?.died {
  if (died) {
    println("I died")
  }
}
var levelController: Controller? = nil

结果是
!levelController?已死亡
变为真。这不是一段非常实用的代码

您可以像这样创建自己的not操作符:

let not = (!)
现在我们可以指定一个bool来测试这个:

let dead = false

if not(dead) {
print(dead)
// Code
} else {
// Code
}

您可以创建自己的not运算符,如下所示:

let not = (!)
现在我们可以指定一个bool来测试这个:

let dead = false

if not(dead) {
print(dead)
// Code
} else {
// Code
}

好的,println(levelController?.died!=true)打印true,我明白了。谢谢如何在不进行比较的情况下使其成为真的?请参见苹果公司的答案识别问题OK,println(levelController?.died!=true)prints真的,我明白了。谢谢如何在不进行任何比较的情况下使其成为真实的想法?请参阅苹果公司的答案,了解如何在不进行任何比较的情况下使其成为真实的想法Codester如何在没有任何比较的情况下实现这一点编码员