Ответ 1
Это интересно. Перед последним Swift 3 вы могли бы сравнить необязательные значения, например
let a: Int? = nil
let b: Int? = 4
print(a < b) // true
и nil
считалось меньше всех необязательных значений.
Эта функция была удалена (SE-0121 - Удалить дополнительные операторы сравнения), и приведенный выше код не сможет скомпилировать в Xcode 8 beta 6 с
error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
По-видимому, мигратор Swift решает эту проблему для вас
предоставление пользовательского оператора <
, который принимает два необязательных операнда
и, следовательно, "восстанавливает" старое поведение.
Если вы удалите это определение, вы увидите, где сравнение делается в вашем коде. Затем попробуйте обновить код и удалите необязательные сравнения.