这种行为有什么解释?
let x: Int? = nil
if x < 10 {
print("x < 10")
}
Run Code Online (Sandbox Code Playgroud)
它打印"x <10".这不应该产生运行时错误或至少是编译器警告吗?
编辑:
我向Apple提交了一份错误报告,他们承认这是另一份报告的现有副本.所以这将由Apple以某种方式处理/修复.
Mar*_*n R 15
这里发生了两件事(无论我们喜不喜欢):首先,有一个操作员
public func <<T : Comparable>(lhs: T?, rhs: T?) -> Bool
Run Code Online (Sandbox Code Playgroud)
如果基础类型具有可比性,则会比较两个选项.行为没有记录(据我所知),但似乎
nilaka Optional<T>.None被认为少于所有非零值Optional<T>.Some(value).
第二, enum Optional有一个构造函数
/// Construct a non-`nil` instance that stores `some`.
public init(_ some: Wrapped)
Run Code Online (Sandbox Code Playgroud)
现在进来
if x < 10 { ... }
Run Code Online (Sandbox Code Playgroud)
lhs有类型Optional<Int>.<
运营商的唯一候选人是上述比较两个选项的候选人.因此,rhs也被推断为可选项,因此这相当于
if x < Optional<Int>.Some(10) { ... }
Run Code Online (Sandbox Code Playgroud)
更新:
此功能已在Swift 3(SE-0121 - 删除可选比较运算符)中删除,该代码不再与Xcode 8(目前为beta 6)编译.