nil == 0
никогда не будет оцениваться как истина, потому что это ложь.Точно так же 1 == 0
не будет оцениваться как true, и вы не сможете предпринять разумных шагов, чтобы это сделать.Неравные вещи не должны возвращать true для ==
.
Синтаксис, который вы хотите, это (nil ?? 0) == 0
, что верно.
Но если вы обнаружите, что пытаетесь рассматривать ноль как 0 очень часто (достаточно часто, чтобы вы захотели какую-то особую обработку), тогда это говорит о том, что ваш тип неверен.Почему эта переменная является необязательной?Похоже, что эта переменная должна быть просто Int в первую очередь.Если он входит в вашу систему как необязательный (чаще всего через JSON), вы должны преобразовать его в необязательный тип как можно раньше и использовать его во всей остальной системе.Подавляющее большинство переменных и свойств в Swift не должно быть необязательным.Если это так (и многие люди совершают эту ошибку), вы обнаружите, что постоянно сражаетесь с системой.
Для вашего редактирования Свифт использовал, чтобы позволить вам использовать <
с нолем таким образом.Он был удален специально ( SE-0121 ), потому что он вызывает так много очень тонких ошибок (точно так же, как неявное лечение NULL, поскольку 0 долго вызывало ошибки в C и ObjC).Вы определенно не должны пытаться вернуть это обратно. Это действительно плохая семантика.