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

Какие значения следует использовать для булевых состояний iOS?

Похоже, что в iOS у меня есть несколько параметров, которые, по-видимому, подходят для логических значений:

YES
NO
TRUE
FALSE
true
false

Какие из них я должен использовать? В этом конкретном случае я скрываю метку, поэтому я должен установить свойство hidden в YES, TRUE или TRUE?

4b9b3361

Ответ 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");