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


Answers:


173

一种方法是转换为字符串(由于只有两种可能性,因此并不难):

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

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


2
输出字符串不应该是:“ Yes”和“ No”:P
Ben

131
或“蛋糕”和“没有蛋糕”。任何适合您的。
迈克尔·迈尔斯

2
我爱蛋糕,没有蛋糕!我要立即用x?@“ Cake”:@“ No Cake”替换所有我的x?@“ YES”:@“ NO”代码:D-好吧,至少无论如何我的对象描述都是这样;)
Jason可可2010年

8
或TheCakeIsALie和TheCakeIsNotALie。
沃伦·P

3
%hhd是将布尔值显示为0或1的整数标志的正确方法。0为假1为真。
OnZ OZCAN

69

我会推荐

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

因为,嗯,BOOLs的叫YESNO在Objective-C。


2
对于宏或函数来说,这似乎是一个显而易见的实用工具(如果只是为了避免字符串文字在整个应用程序中传播)。
沃伦·P

只有您真正不需要避免此类字符串的“传播”(例如,ObjC将不可变字符串(和其他对象)的同值实例合并在一起),以便在内存中仅保留一个副本。宏可以,功能也可以,复制粘贴也可以。
Motti Shneor '19


23

在Objective-C中,BOOL类型只是带符号的char。来自<objc/objc.h>

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

因此,您可以使用%d格式化程序打印它们,但只会打印a 1或a 0,而不会打印YESor NO

或者,您也可以按照其他答案中的建议使用字符串。


1
%c不会尝试打印两个均为控制字符的ASCII字符0或1吗?
JeremyP 2010年

21

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

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

现在您可以开始了...

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


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
}

1

我相信最简单的方法是:

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

@(表达)

动态计算装箱的表达式,并根据其值返回适当的对象文字(即,对于const char *,为NSString;对于整数,为NSNumber等)。


0

我用这个创建了一个NSString类别

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

并像这样使用它:

[NSString stringWithBool:boolValue];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.