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
相关产品推荐
相关产品推荐

