普通键入变量不能与零零变量相提并论,但是字面上的变量可以,为什么是这样


var a = 7
a != nil //Error: value of type 'Int' can never be nil, comparison isn't allowed
7 != nil //--> false
0 > nil //true
-9999999 > nil //true

问题非常类似于上面的代码,好的,我从编译器中获得了它不能将anil进行比较,但是为什么字面的7可以与NIL进行比较。我的意思是 7是创建的现有数字,也永远不可能是 nil,不是吗?

顺便说一句当我尝试也返回true-9999999 > nil时,我终于开始以正确的方式开始了解nil。10分钟前,我仍然认为-1 < nil会返回true。如果您能告诉我更多有关nil的信息,那就太好了。它是什么?它不是指针(与Object-C不同)。只是简单地注意吗?

这是来自标准库

/// A type that can represent either a `Wrapped` value or `nil`, the absence
/// of a value.
public enum Optional<Wrapped> : _Reflectable, NilLiteralConvertible {
   case None
   case Some(Wrapped)

要注意的要点是,可选的是nil convertilible。

第二,这是在Swift库中定义比较的方式,该比较可以在此链接上的github上看到:github swift可选实现代码

public func < <T : Comparable> (lhs: T?, rhs: T?) -> Bool {
  switch (lhs, rhs) {
  case let (l?, r?):
    return l < r
  case (nil, _?):
    return true
  default:
    return false
  }
}
public func > <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
  switch (lhs, rhs) {
  case let (l?, r?):
    return l > r
  default:
    return rhs < lhs
  }
}

合并后可以用来推理您的代码。

策略如下:

 0 > nil
  1. 0是可选或int的含义?
  2. Swift Optinal具有&lt; ,它说如果 LHS为nil nil return true
  3. Swift可选的具有> ,它说如果 RHS为nil return true

简化步骤2和3: nil总是小于.losome

>/&lt的比较当任一侧为零时,没有考虑元素类型。

,在

的情况下
  var a = 7
  a != nil

显然无法将INT与可选的int进行比较。

希望这可以解释。

相关内容

  • 没有找到相关文章

最新更新