0

我没有得到布尔类型?

这是我的代码,我做错了什么?

id val = [ dict objectForKey:key ];

if ([ val isKindOfClass:[ NSString class ] ] )
   print "string";
else if( [ val  isKindOfClass:[ NSNumber class ] ] )
   print "number";
else if( [ val  isKindOfClass:[ BOOL class ] ] )
   print "bool";

没有得到布尔类型。

4

2 回答 2

1

您不能直接保存BOOL价值,NSDictionary因为它不是对象。因此,首先您必须将其更改,NSNumber然后将其保存,NSDictionary然后进行比较isKindOfClass:[NSNumber Class]而不是比较[BOOL class].

例子:-

BOOL value = YES;
NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:[NSNumber numberWithBool:value],@"Bool", nil];

id val = [dict valueForKey:@"Bool"];
if([val isKindOfClass:[NSNumber class]])
{
    //NSNumber Class
}

编辑:

您不能直接将BOOL值转换为NSString。如果您想要格式BOOL的价值,NSString您将不得不制作自己的方法。这是一个使用macro.

定义这个macro你想在哪个类中转换一个BOOLNSString

#define NSStringFromBOOL(aBOOL) aBOOL? @"YES" : @"NO"

然后简单地称之为 -

NSString *bool_string = NSStringFromBOOL(YES);
NSLog(@"%@",bool_string);

它将打印YES而不是“1”。

于 2012-10-20T10:58:07.933 回答
0

BOOL不是类也不是 Objective-C 对象类型。它是一个标量,从 C 原始类型 ( signed char) 类型化而来。你不能这样使用它。

于 2012-10-20T10:53:27.443 回答