BOOL到NSString
如果我有一个方法返回一个BOOL ,我该如何将其转换为NSString以便我可以在控制台中打印出来? 
例如,我尝试过这样做,这是行不通的:
 NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
但是我真的很想把返回值转换成一个NSString。 我知道这是一个原始数据types,所以我不能调用它的方法。 我是否需要单独创build一个string,然后在NSString的方法中使用Bool作为参数?
您需要格式化string中的格式说明符:
 NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
使用三元运算符 :
 BOOl isKind= [thing isKindOfClass:[NSString class]]; NSLog(@"Is Kind of NSString: %d", isKind); NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO"); 
在后台BOOL的行为就像一个inttypes,所以你可以使用%i在NSLog中testing一个BOOLtypes的值:
 BOOL a = YES; BOOL b = NO; NSLog(@"a is %i and b is %i", a, b); // Output: a is 1 and b is 0 
所以,我知道这是非常古老的,但是我认为我不妨把我的解决scheme扔进戒指。 我做:
 #define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO") NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]); 
 我觉得这更符合一些苹果的stringmacros( NSStringFromClass , NSStringFromRect , NSStringFromSelector等等),并且通常非常简单易于使用。 只要确保把这个macros放在全局可访问的地方,或经常导入! 
你打印一个BOOL是这样的:
 NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO"); 
 或者,用新的@符号,可以这样做: 
 NSLog(@"The BOOL value is %@", @(theBoolValue)); 
NSLog使用简单的printf风格调用格式的文本,你的代码示例缺lessembedded对象所需的字符序列。
这应该工作:
 NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
 首先你应该添加一个格式化说明符%@ 。 它应该是这样的: 
 NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 
 你也可以使用extern函数从BOOL提取到NSString的转换,就像苹果用NSStringFromCGRect , NSStringFromClass等 
创buildutils文件或添加到现有的头以下代码:
 //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]])); 
这对我是工作的:
 NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO");