有没有人知道背后的理由"(nil< 0)== true"和"(nil< = 0)== true"在斯威夫特?

时间:2015-07-16 17:04:11

标签: swift null swift2

我认为Swift是一种构造得很好的现代语言,然而,有一件事让我感到困惑,那就是(nil <= 0)== true 的理由(nil&lt; 0)== true。

以下是更多案例:

enter image description here

无论如何,返回true为nil&lt; 0似乎违背了整个可选概念,其中一个论点是关于避免默认数字初始化为&#34; 0&#34;。现在&#34; 0&#34;再次特别。

任何人都有任何解释,Swift决定让(nil&lt; = 0)和(nil&lt; 0)返回true。

2 个答案:

答案 0 :(得分:15)

可选项具有可比性,因此可以对它们进行排序。规则很简单:

  1. 任何两个比较均等的选项。
  2. 如果其中一个选项为零而另一个不是,则nil小于非零。
  3. 如果两个选项都不是nil,则比较未包装的值。
  4. 因此,nil等于nil,nil小于任何非零可选项。

    它与您指定的值0无关。分配-1000或+100,或任何你喜欢的,你得到相同的结果。

答案 1 :(得分:3)

当比较两个选项时,当一个是nil而另一个是一些值时,值总是“更大”,因为没有任何东西。

所以

nil < 0 = true     Because 0 is some value but nil isn't
nil == 0 = false    Makes sense because 0 isn't nil
nil <= 0 = true    Same as before

0也可以替换为任何值,并且将产生相同的结果。实际上是函数

func < <T>(lhs: T?, rhs: T?) -> Bool

如果其中一个为零,则不会查看基础值,它只是说:某些值大于无值没有值等于没有值