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
问题非常类似于上面的代码,好的,我从编译器中获得了它不能将a
与nil
进行比较,但是为什么字面的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
- 0是可选或int的含义?
- Swift Optinal具有&lt; ,它说如果 LHS为nil nil 则
return true
- Swift可选的具有> ,它说如果 RHS为nil 则
return true
简化步骤2和3: nil总是小于.losome
>/&lt的比较当任一侧为零时,没有考虑元素类型。
,在
的情况下 var a = 7
a != nil
显然无法将INT与可选的int进行比较。
希望这可以解释。