You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:07:53