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

Swift中如何判断对象是否为变量存储类型的(子)类型?

Swift 判断对象是否为变量存储类型的子类型

原代码报错的核心原因是:carType是存储类型元实例的变量,而is关键字要求后面跟具体的类型名称,不能直接用变量名拼接.Type来作为类型使用。

下面是两种可行的修正方案:

方案1:使用类型元类型的isSubclass(of:)方法

通过type(of:)获取对象的实际类型,再结合isSubclass(of:)判断是否为目标类型或其子类。注意要额外判断类型相等的情况——因为isSubclass(of:)仅判定子类关系,不包含类型自身的匹配:

class Car {}
class RaceCar : Car {}
class Corvette : RaceCar {}
class Ferrari : RaceCar {}

var carType: Car.Type = RaceCar.self
var someCar: Car = Corvette()

if type(of: someCar).isSubclass(of: carType) || type(of: someCar) == carType {
    // someCar 是 RaceCar 或其子类的实例
    print("匹配成功")
}

方案2:使用isKind(of:)方法

如果你的类继承自NSObject(或遵循NSObjectProtocol),可以直接用isKind(of:)方法,它会同时匹配目标类型及其所有子类,写法更简洁:

// 让Car继承NSObject,子类自动继承该特性
class Car: NSObject {}
class RaceCar : Car {}
class Corvette : RaceCar {}
class Ferrari : RaceCar {}

var carType: Car.Type = RaceCar.self
var someCar: Car = Corvette()

if someCar.isKind(of: carType) {
    // someCar 是 RaceCar 或其子类的实例
    print("匹配成功")
}

内容的提问来源于stack exchange,提问作者revati.at

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:53:17