2010-04-08 84 views

回答

156

一种方式来做到这一点是转换为字符串(因为只有两种可能,这是不难):

NSLog(@" %s", BOOL_VAL ? "true" : "false"); 

我不认为这是布尔值的格式说明。

+1

不应输出字符串:“是”和“否”:P – 2010-04-08 22:22:12

+119

或“蛋糕”和“无蛋糕”。无论你适合什么。 – 2010-04-08 22:23:40

+2

我喜欢蛋糕,没有蛋糕!我将替换所有的x?@“YES”:@“NO”代码与x?@“蛋糕”:@“没有蛋糕”马上:D--好吧,至少对我的对象描述来说); – 2010-04-08 23:26:05

61

我会建议

NSLog(@"%@", boolValue ? @"YES" : @"NO"); 

因为,嗯,BOOL s的在Objective-C称为YESNO

+2

对于宏或函数来说,它似乎是一个明显的实用工具(如果只是为了避免字符串文字在整个应用程序中传播)。 – 2010-04-09 13:48:39

+8

-1用于讽刺“um” – delux247 2013-01-07 21:15:26

22

在Objective-C中,BOOL类型只是一个有符号的字符。从<objc/objc.h>

typedef signed char BOOL; 
#define YES   (BOOL)1 
#define NO   (BOOL)0 

所以您在使用%d格式可以打印,但他们将只打印10,不YESNO

或者您可以使用一个字符串,正如其他答案中所建议的那样。

+1

%c不会尝试打印ASCII字符0或1,它们都是控制字符吗? – JeremyP 2010-04-09 10:22:19

+2

确实。应该使用'%d'。 – mipadi 2010-04-09 12:04:27

40

使用整数格式%d,其将打印01

NSLog(@"%d", myBool); 
+3

尽管xcode抱怨。 – Fresheyeball 2013-02-06 20:53:10

17

添加此内联函数您.h文件:

static inline NSString* NSStringFromBOOL(BOOL aBool) { 
    return aBool? @"YES" : @"NO"; 
} 

现在你已经准备好去...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL)); 
0

只需添加下面的函数,并将它传递的BOOL价值和方法将返回的NSString

- (NSString *)boolValueToString:(BOOL)theBool { 
    if (theBool == 0) 
     return @"NO"; // can change to No, NOOOOO, etc 
    else 
     return @"YES"; // can change to YEAH, Yes, YESSSSS etc 
} 
0

我创建的NSString的类别与此

+ (instancetype)stringWithBool:(BOOL)boolValue { 
return boolValue ? @"YES" : @"NO"; 
} 

而且使用这样的:

[NSString stringWithBool:boolValue];