BOOL
BOOL
型別用於 Objective-C 中的布林值。它有兩個值,YES
和 NO
,與更常見的 true
和 false
形成對比。
它的行為很簡單,與 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。YES
和 NO
值分別定義為 __objc_yes
和 __objc_no
。這些特殊值是 Clang 引入的編譯器內建函式,它們被翻譯為 (BOOL)1
和 (BOOL)0
。如果它們不可用,則 YES
和 NO
直接定義為強制轉換形式。這些定義可在 Objective-C 執行時頭 objc.h 中找到