60

如果我有一个返回 a 的方法BOOL,如何将其转换为 anNSString以便可以在控制台中打印出来?

例如,我尝试这样做,但它不起作用:

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

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

4

8 回答 8

65

使用三元运算符

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

NSLog(@"Is Kind of NSString: %d", isKind);
NSLog(@"Is Kind of NSString: %@", isKind ? @"YES" : @"NO");
于 2009-04-10T19:08:00.450 回答
63

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

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
于 2009-04-10T19:03:56.107 回答
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
于 2011-02-23T02:09:14.717 回答
23

所以,我知道这真的很老了,但我想我不妨把我的解决方案扔进戒指。我愿意:

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

我觉得这更符合 Apple 的一些 to-string 宏(NSStringFromClassNSStringFromRectNSStringFromSelector等),并且通常非常简单易用。只要确保将该宏放在全局可访问或经常导入的地方!

于 2011-12-13T20:49:30.297 回答
13

你像这样打印一个 BOOL:

NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");

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

NSLog(@"The BOOL value is %@", @(theBoolValue));
于 2012-09-11T00:23:59.277 回答
3

NSLog 使用简单的 printf 样式调用格式化其文本,并且您的代码示例缺少嵌入对象所需的字符序列。

这应该有效:

NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
于 2009-04-10T19:06:11.530 回答
0

首先,您应该添加一个格式说明符%@。它应该如下所示:

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

您还可以像 Apple 使用 extern 函数一样提取从BOOLto的转换,等等。NSStringNSStringFromCGRectNSStringFromClass

创建 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]]));
于 2016-06-16T07:54:52.250 回答
-1

这对我有用:

NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO");
于 2015-08-02T20:28:17.883 回答