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

Swift 如何判断实例是否属于指定类型数组中的某一类型

核心实现方案

你可以直接利用数组的contains(where:)高阶函数实现一行判断,比手动写多条件||更易维护,后续新增匹配类型只需要修改types数组即可:

// 匹配逻辑:判断是否为数组中任意类型或其子类的实例
if types.contains(where: { typeVariable is $0 }) {
    // 匹配成功的业务逻辑
}

优化复用方案

如果多个地方需要用到该判断逻辑,可以给基类Base加扩展封装:

extension Base {
    /// 判断当前实例是否属于给定的类型集合(包含子类匹配)
    func isMemberOfAny(in types: [Base.Type]) -> Bool {
        types.contains { self is $0 }
    }
}

调用时写法更简洁:

if typeVariable.isMemberOfAny(in: types) {
    // 逻辑处理
}

注意:精确匹配类型(不包含子类)

如果你不需要匹配子类,要求实例类型和数组中的类型完全相等,把判断逻辑替换为type(of:)对比即可:

// 只有实例类型和数组中存储的类型完全一致时才会命中,子类不会被匹配
if types.contains(where: { type(of: typeVariable) == $0 }) {
    // 逻辑处理
}

内容的提问来源于stack exchange,提问作者Fengson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:24:03