Swift 有人知道这背后的理由吗;(零<;0)=正确";及;(零<;=0)=true";斯威夫特?

Swift 有人知道这背后的理由吗;(零<;0)=正确";及;(零<;=0)=true";斯威夫特?,swift,null,swift2,Swift,Null,Swift2,我认为Swift是一种结构非常完善的现代语言,然而,有一件事让我感到困惑,那就是使用(nil选项是可比较的,因此可以对它们进行排序。例如,规则非常简单: 任何两个为零的选项比较相等 如果其中一个选项为nil,而另一个选项为非nil,则nil小于非nil 如果两个选项都不是nil,则比较未包装的值 因此,nil等于nil,并且nil小于任何非nil可选值 它与您分配的值0无关。分配-1000或+100,或您喜欢的任何值,都会得到相同的结果。当比较两个选项时,一个为零,另一个为某个值,该值总是“更大

我认为Swift是一种结构非常完善的现代语言,然而,有一件事让我感到困惑,那就是使用(nil选项是可比较的,因此可以对它们进行排序。例如,规则非常简单:

  • 任何两个为零的选项比较相等
  • 如果其中一个选项为nil,而另一个选项为非nil,则nil小于非nil
  • 如果两个选项都不是nil,则比较未包装的值
  • 因此,nil等于nil,并且nil小于任何非nil可选值


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

    当比较两个选项时,一个为零,另一个为某个值,该值总是“更大”,因为没有任何值

    所以

    nil<0=true,因为0是某个值,而nil不是
    nil==0=false是有意义的,因为0不是nil
    零布尔
    

    如果其中一个值为零,它甚至不看基本值,它只是说:一些值大于没有值没有值等于没有值

    我认为这与0没有任何关系,比如说。输入任何数字,然后(nil非常聪明,这就是原因。我很生气自己没有想到这一点。你可以使用nil coalescing操作符和可选链接绕过它,仍然可以享受漂亮快捷的速记,例如
    let iszomed=(查看为?MetalView)?cameraPosition.z??0.0<0.0
    。虽然接近可读性的极限。
    nil==nil
    在操场和.swift程序中生成语法错误。这是在Xcode 7.3.1中。我在查看诸如
    instance?.value>0
    instance?.value<0
    等条件表达式时遇到的问题。如果instance是nil,然后
    (实例?.value<0)==true
    但是
    (实例?.value>0)==false
    (实例?.value==0)==false
    ,这对我来说真的很奇怪。有人提到过“选项是可比的”吗是苹果公司声明的吗?指向一些库代码或文档的指针,他们说可选类型都遵守可比较的协议,这就是我要找的。是的,你是对的。应该看看代码。
    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
    
    func < <T>(lhs: T?, rhs: T?) -> Bool