BOOL到NSString

Cra*_*aig 60 boolean objective-c nsstring

如果我有一个返回a的方法,BOOL我该怎么把它转换成一个NSString所以我可以在控制台中打印出来?

例如,我尝试这样做,这是行不通的:

NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)

但我真的想将返回值转换为NSString.我知道它是一种原始数据类型,所以我不能在它上面调用方法.我是否必须单独创建一个字符串,然后在NSString的方法中使用Bool作为参数?

And*_*ant 65

使用三元运算符:

BOOl isKind= [thing isKindOfClass:[NSString class]];

NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)

  • 你在这些字符串前面缺少'@'. (8认同)

小智 63

您需要格式字符串中的格式说明符:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
Run Code Online (Sandbox Code Playgroud)


sid*_*ick 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
Run Code Online (Sandbox Code Playgroud)


Pat*_*ini 23

所以,我知道这真的很老了,但我想我不妨将我的解决方案扔进戒指.我做:

#define NSStringFromBOOL(aBOOL)    ((aBOOL) ? @"YES" : @"NO")
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]);
Run Code Online (Sandbox Code Playgroud)

我觉得这是更符合一些苹果到字符串宏(线NSStringFromClass,NSStringFromRect,NSStringFromSelector,等),一般很简单的在即时使用.只需确保将该宏放在全球可访问或经常导入的地方!

  • 使用NS-为事物添加前缀并不是一个好主意.这是Apple的前缀.当他们稍后添加它并且你的定义开始微妙地冲突时,它会导致相当多的挫败感. (13认同)
  • 但是当你检查的对象实际命名为*NSString时,你会怎么做?把它称之为其他任何东西都无法代表它所检查的内容. (5认同)
  • 同意查克; 宏将更好地命名为`BOOLToNSString()`.@chroipahtz (2认同)
  • 额外的括号表示好的措施:`#define NSStringFromBOOL(b)((b)?@"YES":@"NO")` (2认同)

Hot*_*cks 13

你打印这样的BOOL:

NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");
Run Code Online (Sandbox Code Playgroud)

或者,使用新的@符号,可以做到:

NSLog(@"The BOOL value is %@", @(theBoolValue));
Run Code Online (Sandbox Code Playgroud)