Objective-C的布尔值格式化字符串是什么?

125

用于布尔值的格式化程序是什么?

编辑:

例如:NSLog(@" ??", BOOL_VAL);??是什么?

9个回答

180

一种方法是将其转换为字符串(因为只有两种可能性,所以并不难):

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

我认为布尔值没有格式说明符。


2
输出字符串不应该是:“是”和“否”吗? :P - Ben S
137
"蛋糕"或"没蛋糕",随你喜欢。 - Michael Myers
2
我喜欢蛋糕,但也不喜欢!我打算立即将所有的x?@"YES":@"NO"代码替换为x?@"Cake":@"No Cake" :D -- 好吧,至少对于我的对象描述是这样的 ;) - Jason Coco
8
或者TheCakeIsALie和TheCakeIsNotALie。 - Warren P
3
%hhd是以整数标记0或1的方式显示布尔值的正确方法。0代表false,1代表true。 - Onder OZCAN
显示剩余2条评论

72

我建议

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

因为在Objective-C中,BOOL类型被称为YESNO


2
这似乎是一个宏或函数的显而易见的实用点(仅为避免在整个应用程序中传播字符串字面量)。 - Warren P
你其实不需要避免这种字符串的“传播”,因为ObjC会合并不可变字符串(和其他对象)的相同实例,以便只有一个副本驻留在内存中。宏可以,函数也可以,复制粘贴也可以。 - Motti Shneor

58

使用整数格式化程序%d,它将打印01

NSLog(@"%d", myBool);

24

在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

23

将以下内联函数添加到您的.h文件中:

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

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

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

5

在苹果开发者网站上,这个非常隐藏。 - Echilon

4
我认为最简单的方法是:

我相信最简单的方法是:

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

@(expression)

动态评估封装的表达式并根据其值返回相应的对象文本(例如,对于const char *,返回NSString,对于int,则返回NSNumber等)。


是的,它会相应地将布尔值转换为1和0。谢谢。 - Rakshitha Muranga Rodrigo

1

只需添加以下函数并将其传递给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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接