Кто-нибудь знает логическое обоснование "(nil <0) == true" и "(nil <= 0) == true" в Swift?

Я думаю, что Swift - очень хорошо построенный современный язык, однако есть одна вещь, которая меня озадачивает, и это является обоснованием наличия (nil <= 0) == true и (nil < 0) == true.

Вот еще примеры:

enter image description here

В любом случае, верните true для nil < 0, похоже, противоречит всей необязательной концепции, где один из аргументов состоял в том, чтобы избежать инициализации номера по умолчанию до "0". Теперь "0" является особенным снова.

У кого-нибудь есть объяснения, Свифт решил иметь (nil <= 0) и (nil < 0) вернуть true.

Ответ 1

Варианты сопоставимы, поэтому их можно сортировать, например. Правила очень просты:

  • Любые два варианта, которые равны нулю, равны.
  • Если один из опций - nil, а другой - нет, nil меньше, чем non-nil.
  • Если оба параметра не равны нулю, сравниваются развернутые значения.

Как следствие, nil равно nil, а nil меньше любого не-nil необязательного.

Это не имеет ничего общего с назначенным вами значением 0. Назначьте -1000, или +100, или что угодно, и получите тот же результат.

Ответ 2

При сравнении двух опций, когда один равен нулю, а другое значение, значение всегда "больше", потому что нет ничего.

Итак,

nil < 0 = true     Because 0 is some value but nil isn't
nil == 0 = false    Makes sense because 0 isn't nil
nil <= 0 = true    Same as before

0 также может быть заменено любым значением и будет получен тот же результат. На самом деле функция

func < <T>(lhs: T?, rhs: T?) -> Bool

Даже не смотрит на базовое значение, если один из них равен нулю, он просто говорит: Некоторое значение больше, чем никакое значение и Нет значения равно ни одному значению