Подтвердить что ты не робот

Странная общая функция появляется в представлении контроллера после преобразования в swift 3

В моем проекте после преобразования в 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
  }
}

Что делает эта функция? Зачем мне это нужно?

4b9b3361

Ответ 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 решает эту проблему для вас предоставление пользовательского оператора <, который принимает два необязательных операнда и, следовательно, "восстанавливает" старое поведение.

Если вы удалите это определение, вы увидите, где сравнение делается в вашем коде. Затем попробуйте обновить код и удалите необязательные сравнения.