Какие значения следует использовать для булевых состояний iOS?
Похоже, что в iOS у меня есть несколько параметров, которые, по-видимому, подходят для логических значений:
YES
NO
TRUE
FALSE
true
false
Какие из них я должен использовать? В этом конкретном случае я скрываю метку, поэтому я должен установить свойство hidden
в YES
, TRUE
или TRUE
?
Ответы
Ответ 1
Короткий ответ: вы должны предпочесть YES
и NO
для задания свойств основания типа BOOL
.
Для длинного ответа сначала посмотрим, где определены эти константы:
-
true
и false
взяты из stdbool.h
; они #define
-d как 1
и 0
-
true
и false
- от CFBase.h
; они #define
-d как 1
и 0
-
YES
и NO
- от NSObjCRuntime.h
. Здесь signed char
typedef
-ed как BOOL
, а его два значения #define
-d как ((BOOL)1)
и ((BOOL)0)
или __objc_yes
/__objc_no
, если поддерживается objc_bool
.
Классы фундамента последовательно используют BOOL
, который является typedef
для signed char
, для представления его булевых свойств. Поскольку первые две пары преобразуются в константы int
, использование их может привести к предупреждениям, хотя в любом случае оно, вероятно, будет работать правильно. Однако константы YES
и NO
определены наиболее совместимым способом для вашего компилятора независимо от его версии. Поэтому я бы рекомендовал последовательно использовать YES
и NO
во всем вашем коде.
Ответ 2
На самом деле нет разницы между YES
, TRUE
и TRUE
, которые все представляют истинное состояние, представленное 1.
И NO
, false
, false
представляет ложное состояние, представленное 0.
Вы также можете использовать:
BOOL aBool = 1;
что эквивалентно BOOL aBool = true;
и BOOL aBool = true;
и BOOL aBool = YES;
Но:
BOOL bBool = 7;
if (bBool)
{
NSLog(@"bBool is YES!\n");
}
if (bBool != YES) {
NSLog("bBool is not YES!\n");
}
Будет выводиться как:
b is YES!
b is not YES!
Это связано с тем, что прямое сравнение с YES завершится неудачно, когда значение типа BOOL
будет отличным от нуля значением, отличным от 1.
Вот вам приятная статья.
Ответ 3
Я думаю, что все они в порядке. Но лично я хотел бы использовать YES
/NO
.
Я нашел документ под названием Objective-C Ссылка на время работы:
Логические значения Эти макросы определяют удобные константы для представления булевых значений.
#define YES (BOOL) 1
#define NO (BOOL) 0
Константы
YES
Определяет ДА как 1.
Доступен в iOS 2.0 и более поздних версиях.
Объявлено в NSObjCRuntime.h.
NO
Определяет NO как 0.
Доступен в iOS 2.0 и более поздних версиях.
Объявлено в NSObjCRuntime.h.
Объявлено в
objc.h
Ответ 4
Я разделяю ваше мнение по этому вопросу, хотя в настоящее время все они определены одинаково, перенос кода - это боль, когда вы можете найти TRUE!= true. (Именно поэтому мы никогда не должны тестировать X == 1 для TRUE, поскольку некоторые языки используют -1, а некоторые используют 1)
Я думаю, что это может быть личное предпочтение и в основном о будущих портах.
Я следую параметрам TRUE и FALSE, чтобы упростить перенос на C/С++.
Вы можете обнаружить, что true и false лучше, если вы регулярно конвертируете код в Java, поэтому там меньше поиска/заменяет, но я нашел согласованность с Cocoa проще.
Ответ 5
Используйте YES и NO, чтобы использовать TRUE и FALSE или 1 и 0 соответственно.
И используйте NSLog для просмотра результата, как этот маленький пример:
BOOL result;
result = YES;
NSLog(@"my boolean result is %@",result ? @"Yes" : @"No");