Swift === с нолем
Почему в Swift не работает следующее?
if someObject === nil {
}
Вы должны выполнить тест, используя оператор ==, такой как
if someObject == nil {
}
Я думал, что === больше похоже на то, чтобы убедиться, что те же самые (в основном, сравнение указателей) и == больше напоминают проверку isEqual. Таким образом, я думаю, что === было бы более подходящим для тестирования против нуля, но я, очевидно, неверен.
В документации указано:
=== или "Идентично" означает, что две константы или переменные типа класса относятся к одному и тому же экземпляру класса.
== или "Equal to" означает, что два экземпляра считаются "равными" или "эквивалентными" по значению, для некоторого подходящего значения "equal", как определено дизайнером типов ".
Ответы
Ответ 1
Он работает точно так же, как вы ожидаете:
var s: String? = nil
s === nil // true
Единственное предостережение в том, что для сравнения с nil
ваша переменная должна быть nil
. Это означает, что он должен быть необязательным, обозначенным символом ?
,
var s: String
не может быть nil
, поэтому всегда возвращает false
когда ===
по сравнению с nil
.
Ответ 2
Моим первым инстинктом было бы то, что nil
не является экземпляром класса, а ссылкой. Поэтому someObject
не может быть эквивалентным экземпляром класса для nil
.