一尘不染

转换为Swift 3后,奇怪的通用函数出现在视图控制器中

swift

在我的项目中,转换为swift 3之后,在我的ViewController课程之前出现了一个新函数:

fileprivate 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
  }
}

此功能有什么作用?我为什么需要它?


阅读 200

收藏
2020-07-07

共1个答案

一尘不染

这太有趣了。在最新的Swift 3之前,您可以比较 可选 值,例如

let a: Int? = nil
let b: Int? = 4

print(a < b) // true

并且nil被认为小于所有非可选值。

此功能已被删除(SE-0121-删除可选的比较运算符),并且以上代码将无法在Xcode 8 beta 6中使用

错误:可选类型'Int?'的值 没有包装; 你是说用'!' 要么 '?'?

显然,Swift迁移器通过提供一个自定义<运算符为您解决了该问题,该运算符采用两个可选操作数,因此“恢复”了旧的行为。

如果删除该定义,则应该看到在代码中进行比较的位置。然后尝试更新您的代码并删除可选的比较。

2020-07-07