Как проверить, равен ли примитив в Objective-C нулю?
-
23-08-2019 - |
Вопрос
Делаю проверку в приложении на айфоне -
int var;
if (var != nil)
Это работает, но в X-коде это генерирует предупреждение «сравнение между указателем и целым числом». Как мне это исправить?
Я родом из мира Java, где я почти уверен, что приведенное выше утверждение не будет выполнено при компиляции.
Решение
Примитивов быть не может. nil
. nil
зарезервировано для указателей на объекты Objective-C. nil
технически является типом указателя, и смешивание указателей и целых чисел без приведения почти всегда приводит к предупреждению компилятора, за одним исключением:совершенно нормально неявно преобразовать целое число 0 в указатель без приведения.
Если вы хотите различать 0 и «нет значения», используйте NSNumber
сорт:
NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil) // compare against nil
; // do one thing
else if([num intValue] == 0) // compare against 0
; // do another thing
Другие советы
if (var) {
...
}
Добро пожаловать в чудесный мир C.Любое значение, не равное целому числу 0 или нулевому указателю, является истиной.
Но у вас есть ошибка:ints не могут быть нулевыми.Это типы значений, как в Java.
Если вы хотите «упаковать» целое число, вам нужно запросить его адрес:
int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0; // This is setting "the box" to null,
// NOT setting the integer value