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 中找到