如何创建通用id类型属性?

时间:2011-01-17 18:59:35

标签: ios4

我是iOS和Objective-C的新手,并尝试创建一个具有通用属性的类。

@interface HeaderInfo : NSObject { NSString *label; id value; }

@property (nonatomic, retain) NSString *label;
@property (nonatomic, retain) id value;
- (HeaderInfo *)initWithLabel:(NSString *)lbl value:(id)val;

@end

@property (nonatomic, retain) NSString *label; @property (nonatomic, retain) id value; - (HeaderInfo *)initWithLabel:(NSString *)lbl value:(id)val; @end

然后我试图将这个类添加到数组中:

[generalSection.items addObject:[[HeaderInfo alloc] initWithLabel:@"Tacho seal security" value:@"Some String Value"]];

但编译器不喜欢第二次添加并说:

[generalSection.items addObject:[[HeaderInfo alloc] initWithLabel:@"Tacho seal security" value:YES]];

我做错了什么?非常感谢任何帮助。

以后如何检查该值是否为BOOL或NSString?

感谢。

1 个答案:

答案 0 :(得分:2)

BOOL类型不是对象,因此您不能将其作为id(通用对象)传递。

您应该传递NSNumber。当您想要将数字作为对象传递时,NSNumber是一个封装数字的对象。

您可以像这样创建NSNumber[NSNumber numberWithBool:YES];

您可以使用[value boolValue];

检索值

如果你想检查你在运行时拥有的对象的类型,你可以这样:

if ([value isKindOfClass:[NSNumber class]]) {
   //It's a number
}
else if ([value isKindOfClass:[NSString class]]) {
   //It's a string
}