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

在我的项目中,在转换为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 } } 

这个function是做什么的? 为什么我需要它?

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

 let a: Int? = nil let b: Int? = 4 print(a < b) // true 

而且nil被认为比所有非可选值都less。

此function已被删除( SE-0121 – 删除可选比较运算符 ),上面的代码将无法在Xcode 8 beta 6中编译

错误:可选types'Int?'的值 不解开; 你的意思是使用'!' 要么 '?'?

显然,Swift migrator通过提供一个自定义的<运算符来解决这个问题,该运算符带有两个可选的操作数,从而“恢复”旧的行为。

如果你删除了这个定义,那么你应该看看在你的代码中完成比较的地方。 然后尝试更新您的代码并删除可选的比较。