文字列表/类类型数组

时间:2019-03-09 14:54:51

标签: objective-c

在目标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

1 个答案:

答案 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