我是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?
感谢。
答案 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
}