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( NSStringFromClassNSStringFromRectNSStringFromSelector等等),并且通常非常简单易于使用。 只要确保把这个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的转换,就像苹果用NSStringFromCGRectNSStringFromClass

创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");