如果我有一个返回BOOL
的方法,如何将其转换为NSString
,以便我可以在控制台中将其打印出来?
例如,我尝试这样做,这是行不通的:
NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
但我真的想将返回值转换为NSString。我知道它是一种原始数据类型,所以我不能在它上面调用方法。我是否必须单独创建一个字符串,然后在NSString的方法中使用Bool作为参数?
答案 0 :(得分:65)
BOOl isKind= [thing isKindOfClass:[NSString class]];
NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");
答案 1 :(得分:63)
您需要格式字符串中的格式说明符:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
答案 2 :(得分:33)
在后台BOOL的行为类似于int类型,因此您可以使用%i在NSLog中测试BOOL类型的值:
BOOL a = YES;
BOOL b = NO;
NSLog(@"a is %i and b is %i", a, b);
// Output: a is 1 and b is 0
答案 3 :(得分:22)
所以,我知道这真的很老了,但我想我不妨将我的解决方案扔进戒指。我这样做:
#define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO")
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]);
我觉得这更符合Apple的一些to-string宏(NSStringFromClass
,NSStringFromRect
,NSStringFromSelector
等等,并且通常非常简单易用-the飞。只要确保将宏放在全球可访问或经常导入的地方!
答案 4 :(得分:13)
你打印一个像这样的BOOL:
NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");
或者,使用新的@
表示法,可以执行以下操作:
NSLog(@"The BOOL value is %@", @(theBoolValue));
答案 5 :(得分:3)
NSLog使用简单的printf样式调用格式,并且您的代码示例缺少嵌入对象所需的字符序列。
这应该有效:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
答案 6 :(得分:0)
首先,您应该添加格式说明符%@
。
它应该是这样的:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
此外,您可以使用extern函数提取从BOOL
到NSString
的转换,就像Apple对NSStringFromCGRect
,NSStringFromClass
等所做的那样。
创建utils文件或将以下代码添加到现有文件头中:
//NSString+TypeConversion.h
extern NSString *NSStringFromBOOL(BOOL aBool);
并将以下代码添加到实现中:
//NSString+TypeConversion.m
NSString *NSStringFromBOOL(BOOL aBool)
{
return aBool ? @"YES" : @"NO";
}
所以现在你可以在其他地方使用这个功能,你的代码变得更加清晰和可重用:
#import "NSString+TypesConversion.h"
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass:[NSString class]]));
答案 7 :(得分:-1)
这对我有用:
NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO");