Objective-C中如何声明类类型列表?并判断对象类是否在列表中
在Objective-C中声明类类型列表并检查对象类归属的实现
在Objective-C里实现你要的功能其实很直观,咱们分步骤来看:
1. 声明包含类类型的列表
Objective-C中,类对象的类型是Class,我们可以用NSArray来存储这些类对象。初始化的时候直接通过类的+class方法获取对应的类实例即可:
// 初始化包含指定类的列表 NSArray<Class> *classList = @[[MyClass1 class], [MyClass2 class], [MyClass3 class]];
这里用泛型<Class>可以让编译器做类型检查,避免不小心存入非类对象的元素。
2. 检查对象的类是否在列表中
你的需求是判断输入对象的类是否与列表中的类完全一致(不是子类关系),有两种简洁的实现方式:
方式一:遍历列表直接比较类指针
因为每个类的类对象是全局单例,直接比较指针是最高效且准确的方式:
- (BOOL)isInputObjectInClassList:(id)inputObject { NSArray<Class> *classList = @[[MyClass1 class], [MyClass2 class], [MyClass3 class]]; Class inputClass = [inputObject class]; for (Class currentClass in classList) { if (inputClass == currentClass) { return YES; } } return NO; }
方式二:利用NSArray的containsObject:方法
由于类对象是单例,containsObject:内部会直接比较对象指针,所以可以一行代码搞定:
- (BOOL)isInputObjectInClassList:(id)inputObject { NSArray<Class> *classList = @[[MyClass1 class], [MyClass2 class], [MyClass3 class]]; return [classList containsObject:[inputObject class]]; }
额外说明
如果你的需求是允许检查子类归属(比如输入对象是MyClass1的子类实例也返回YES),那就要把判断逻辑改成[inputObject isKindOfClass:currentClass],遍历列表逐一检查即可。
内容的提问来源于stack exchange,提问作者Rafe
相关产品推荐
相关产品推荐

