In my project, after converting to swift 3, a new function appeared before my ViewController
class:
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
}
}
What does this function do? Why do I need it?
That is interesting. Before the latest Swift 3, you could compare optional values, for example
and
nil
was considered less than all non-optional values.This feature has been removed (SE-0121 – Remove Optional Comparison Operators) and the above code would fail to compile in Xcode 8 beta 6 with
Apparently, the Swift migrator solves that problem for you by providing a custom
<
operator which takes two optional operands and therefore "restores" the old behavior.If you remove that definition then you should see where the comparison is done in your code. Then try to update your code and remove the optional comparisons.