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

Bri*_*ure 39 ios swift swift3

在我的项目中,在转换为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
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 45

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

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

print(a < b) // true
Run Code Online (Sandbox Code Playgroud)

nil被认为比所有非可选值少.

此功能已被删除(SE-0121 - 删除可选比较运算符),上述代码无法在Xcode 8 beta 6中编译

error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?

显然,斯威夫特迁移提供了一个自定义的解决了这个问题你<操作它有两个可选的操作数,因此"恢复"旧的行为.

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

  • @BrightFuture:根据我的经验,Xcode补充说只有在某个地方需要它.尝试删除它,看看会发生什么. (11认同)