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

Swift === с нолем

Почему в Swift не работает следующее?

    if someObject === nil {
    }

Вы должны выполнить тест, используя оператор ==, такой как

    if someObject == nil {
    }

Я думал, что === больше похоже на то, чтобы убедиться, что те же самые (в основном, сравнение указателей) и == больше напоминают проверку isEqual. Таким образом, я думаю, что === было бы более подходящим для тестирования против нуля, но я, очевидно, неверен.

В документации указано:

=== или "Идентично" означает, что две константы или переменные типа класса относятся к одному и тому же экземпляру класса.

== или "Equal to" означает, что два экземпляра считаются "равными" или "эквивалентными" по значению, для некоторого подходящего значения "equal", как определено дизайнером типов ".

4b9b3361

Ответ 1

Он работает точно так же, как вы ожидаете:

var s: String? = nil
s === nil // true

Единственное предостережение в том, что для сравнения с nil ваша переменная должна быть nil. Это означает, что он должен быть необязательным, обозначенным символом ? ,

var s: String не может быть nil, поэтому всегда возвращает false когда === по сравнению с nil.

Ответ 2

Моим первым инстинктом было бы то, что nil не является экземпляром класса, а ссылкой. Поэтому someObject не может быть эквивалентным экземпляром класса для nil.