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

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

YES NO TRUE FALSE true false 

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

Короткий ответ: вы должны предпочесть 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 as ((BOOL)1) и ((BOOL)0) или __objc_yes / __objc_no если objc_bool поддерживается.

Классы фундамента последовательно используют BOOL , который является typedef для signed char , для представления его булевых свойств. Поскольку первые две пары преобразуются в int константы, использование их может привести к предупреждениям, хотя, вероятно, это будет работать в любом случае. Однако константы YES и NO определены наиболее совместимым способом для вашего компилятора независимо от его версии. Поэтому я бы рекомендовал использовать YES и NO последовательно во всем коде.

На самом деле нет никакой разницы между 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.

Вот вам хорошая статья .

Я думаю, что все они в порядке. Но лично я хотел бы использовать YES / NO .

Я нашел документ под названием Objective-C Runtime Reference :

Булевские значения Эти макросы определяют удобные константы для представления булевых значений.

#define ДА (BOOL) 1
#define NO (BOOL) 0

Константы

ДА
Определяет ДА ​​как 1.
Доступно в iOS 2.0 и более поздних версиях.
Объявлено в NSObjCRuntime.h.

НЕТ
Определяет NO как 0.
Доступно в iOS 2.0 и более поздних версиях.
Объявлено в NSObjCRuntime.h.

Объявлено в
objc.h

Я разделяю ваше мнение по этому вопросу, в то время как в настоящее время все они определены одинаково, перенос кода – это боль, когда вы можете найти TRUE! = True. (Именно поэтому мы никогда не должны тестировать X == 1 для TRUE, поскольку некоторые языки используют -1, а некоторые используют 1)

Я думаю, что это может быть личное предпочтение и в основном о будущих портах.

Я следую параметрам TRUE и FALSE, чтобы упростить перенос на C / C ++.

Вы можете обнаружить, что true и false лучше, если вы регулярно конвертируете код в Java, поэтому есть меньше поиска / замещений, но я нашел последовательность с Cocoa проще.

Используйте YES и NO, чтобы использовать TRUE и FALSE или 1 и 0 соответственно.

И используйте NSLog для просмотра результата, как этот небольшой пример:

 BOOL result; result = YES; NSLog(@"my boolean result is %@",result ? @"Yes" : @"No"); 
  • Как я могу получить противоположное значение Bool в Swift?
  • Набор кнопок выбран через BOOL
  • Как установить свойство типа boolean в объектном классе C
  • BOOL свойство KVC: это поведение ошибка?
  • Как заставить NSJSONSerialization выводить логическое значение как true или false?
  • Как я могу определить MPMediaItemPropertyArtwork в swift?
  • функция с возвратным типом bool в шейдере OpenGL ES с использованием GPUImage
  • Нужна помощь в экономии bool для NSUserDefaults и использовании его в выражении if с помощью Swift
  • Объект ios C Bool не устанавливается
  • Каков оптимальный размер для булевой переменной
  • Предупреждение при заполнении массива BOOL
  • Давайте будем гением компьютера.