在目标c中,如何声明一个包含类型的列表?我要做的是列出特定类的类型,然后检查该列表中是否有特定对象的类。
伪代码:
SET class_list TO [MyClass1, MyClass2, MyClass3]
SET input_class_type TO class of input_object
FOR each current_class_type in class_list
IF input_class_type is same class type as current_class_type
return TRUE
END LOOP
return FALSE
答案 0 :(得分:2)
NSArray *classes = @[[NSArray class], [NSDictionary class], [NSSet class]];
id inputObject = [NSSet new];
for (Class class in classes) {
if ([inputObject isKindOfClass: class]) {
return true;
}
}
return false;
您通常需要isKindOfClass
,它也可以检查类型是否为给定类型的子类。如果您想知道它是完全相同的类,则可以使用isMemberOfClass
,但常常会感到惊讶。例如:
[[NSSet new] isMemberOfClass:[NSSet class]] == false
!!!!
为什么NSSet不是NSSet?因为NSSet是一个类群集,在这种情况下,“真实”类型是一个内部实现子类,称为__NSSetI。这类事情在Objective-C中经常发生,因此除非您有非常特殊的需求,否则通常指的是isKindOfClass
。