BOOL

BOOL 型別用於 Objective-C 中的布林值。它有兩個值,YESNO,與更常見的 truefalse 形成對比。

它的行為很簡單,與 C 語言相同。

BOOL areEqual = (1 == 1);    // areEqual is YES
BOOL areNotEqual = !areEqual    // areNotEqual is NO
NSCAssert(areEqual, "Mathematics is a lie");    // Assertion passes

BOOL shouldFlatterReader = YES;
if (shouldFlatterReader) {
    NSLog(@"Only the very smartest programmers read this kind of material.");
}

BOOL 是一個原語,因此它不能直接儲存在 Foundation 集合中。它必須包裹在一個 NSNumber。Clang 為此提供了特殊的語法:

NSNumber * yes = @YES;    // Equivalent to [NSNumber numberWithBool:YES]
NSNumber * no = @NO;    // Equivalent to [NSNumber numberWithBool:NO]

BOOL 實現直接基於 C,因為它是 C99 標準型別 bool 的 typedef。YESNO 值分別定義為 __objc_yes__objc_no。這些特殊值是 Clang 引入的編譯器內建函式,它們被翻譯為 (BOOL)1(BOOL)0。如果它們不可用,則 YESNO 直接定義為強制轉換形式。這些定義可在 Objective-C 執行時頭 objc.h 中找到