Objective c BOOL到NSString
如果我有一个返回Objective c BOOL到NSString,objective-c,nsstring,boolean,Objective C,Nsstring,Boolean,如果我有一个返回BOOL的方法,如何将其转换为NSString,以便在控制台中打印出来 例如,我尝试过这样做,但不起作用: NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO"); 但是我真的想把返回值转换成NSString。我知道它是一种原始数据类型,所以我不能对它调用方法。我是否必须单独创建一个字符串,然后在NSString的方法中使用Bool作为参数?您的格式字符串
BOOL
的方法,如何将其转换为NSString
,以便在控制台中打印出来
例如,我尝试过这样做,但不起作用:
NSLog(@"Is Kind of NSString:", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
但是我真的想把返回值转换成NSString。我知道它是一种原始数据类型,所以我不能对它调用方法。我是否必须单独创建一个字符串,然后在NSString的方法中使用Bool作为参数?您的格式字符串中需要一个格式说明符:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
NSLog使用一种简单的printf样式调用格式来设置文本,您的代码示例缺少嵌入对象所需的字符序列 这应该起作用:
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
使用:
在后台,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
所以,我知道这真的很古老,但我想我还是把我的解决方案扔进拳击场吧。我有:
#define NSStringFromBOOL(aBOOL) ((aBOOL) ? @"YES" : @"NO")
NSLog(@"Is Kind of NSString: %@", NSStringFromBOOL([thing isKindOfClass: [NSString class]]);
我觉得这更符合苹果的一些to-string宏(
NSStringFromClass
,NSStringFromRect
,NSStringFromSelector
,等等),而且通常很容易在运行中使用。只需确保将该宏放在全局可访问或经常导入的位置 您可以像这样打印BOOL:
NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
或者,使用新的@
符号,可以执行以下操作:
NSLog(@"The BOOL value is %@", @(theBoolValue));
这是我的工作:
NSLog(@"The BOOL value is %@", theBoolValue ? "YES" : "NO");
首先,您应该添加一个格式化说明符
%@
。
应该是这样的:
NSLog(@"The BOOL value is %s", theBoolValue ? "YES" : "NO");
NSLog(@"Is Kind of NSString: %@", ([thing isKindOfClass:[NSString class]]) ? @"YES" : @"NO");
您还可以使用extern函数提取从BOOL
到NSString
的转换,就像Apple使用NSStringFromCGRect
,nsstringfromcclass
等所做的那样
创建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]]));
这些字符串前面缺少“@”。在前面加上NS-,不是一个好主意。这是苹果的前缀。当他们稍后添加它时,会导致相当多的挫折感,并且您的定义开始微妙地冲突。但是,当您正在检查的对象实际命名为NSString时,您该怎么办?称它为任何其他东西都不能代表它正在检查的东西;宏最好命名为
booltonstring()
@chroiphatzit不是以NS作为前缀,而是说它返回一个NSString
。是的,这可能会导致冲突,但这是因为名称只使用了两种Apple类型,而不是因为它有前缀(这意味着删除NS并不能解决问题)。如果不希望冲突,则必须将自己的前缀放入任何全局符号中,在本例中为PCPNSStringFromBOOL
。用于良好度量的额外括号:#定义NSStringFromBOOL(b)((b)@“是”:@“否”)
您的语句的问题只是在NSLog的第一个参数中没有包含任何格式说明符。和布尔有没有关系。