
这个行为的解释是什么?
let x: Int? = nilif 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).
总结以上是内存溢出为你收集整理的Swift运算符和nil全部内容,希望文章能够帮你解决Swift运算符和nil所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)