微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift运算符和nil

参见英文答案 > Swift nil has a numeric value?1
这个行为的解释是什么?
let x: Int? = nil
if x < 10 {
    print("x < 10")
}

它打印“x <10”.这不应该产生运行时错误或至少编译器警告? 编辑: 我向苹果提交了一个错误报告,他们认为这是另一个报告的已经存在的副本.所以这将由Apple以某种方式处理/修复.

两件事情发生在这里(无论我们喜欢还是不喜欢):首先,有一个
操作者
public func <<T : Comparable>(lhs: T?,rhs: T?) -> Bool

如果底层类型是可比较的,则比较两个可选项.
行为没有记录(据我所知),但似乎
nil aka可选< T>.被认为小于所有非零
值可选< T> .some(value).

其次,枚举可选具有构造函数

/// Construct a non-`nil` instance that stores `some`.
public init(_ some: Wrapped)

现在在

if x < 10 { ... }

lhs的类型为< Int>.唯一的候选人
操作者是上述两个可选项.
因此,rhs被推断为可选的,所以这样
相当于

if x < Optional<Int>.some(10) { ... }

更新:

功能已在Swift 3(SE-0121 – Remove Optional Comparison Operators)中删除,该代码不再与Xcode 8一起编译(目前为6).

原文地址:https://www.jb51.cc/swift/319796.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐