Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c BOOL到NSString_Objective C_Nsstring_Boolean - Fatal编程技术网

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的第一个参数中没有包含任何格式说明符。和布尔有没有关系。