如果一种类型与另一种类型兼容,则进行Swift测试

如果一种类型与另一种类型兼容,则进行Swift测试,swift,Swift,想象一下以下情况: class Car { } class Mercedes: Car { } let aCarType: Any.Type = Mercedes.self 如何测试aCarType中表示的类型是否继承自Car aCarType is Car.Type 当然,返回值总是false 在我的情况下,Objective-C动态是不可能的aCarType填充在我无法控制的代码中。您尝试过这个吗 if let carType = type as? Car.Type { } 您可

想象一下以下情况:

class Car {
}

class Mercedes: Car {
}

let aCarType: Any.Type = Mercedes.self
如何测试
aCarType
中表示的类型是否继承自
Car

aCarType is Car.Type
当然,返回值总是false

在我的情况下,Objective-C动态是不可能的
aCarType
填充在我无法控制的代码中。

您尝试过这个吗

if let carType = type as? Car.Type {

}

您可以使用
is
操作符测试某个类型是否属于特定的类或子类,这相当于Objective-C中的
isKindOfClass

class Car {}

class Mercedes: Car {}

let SLK = Mercedes()

SLK is Car // --> true
SLK is Mercedes // --> true
SLK.dynamicType == Car.self // --> false
SLK.dynamicType == Mercedes.self // --> true
但是,如果要检查特定类而不是其超类,请使用
dynamicType
,这相当于Objective-C中的
isMemberOfClass

class Car {}

class Mercedes: Car {}

let SLK = Mercedes()

SLK is Car // --> true
SLK is Mercedes // --> true
SLK.dynamicType == Car.self // --> false
SLK.dynamicType == Mercedes.self // --> true

使用
is
运算符和
Type
属性可以快速检查一个类是否等于另一个类或另一个类的子类。下面是一个例子:

let c: Any.Type = UIButton.self        
print(c is UIButton.Type) // true
print(c is UIView.Type) // true
print(c is UILabel.Type) // false

因此,语句
aCarType为Car。问题中的Type应始终计算为
true
。我在最新版本的Xcode 6(Swift 1.2)和Xcode 7(Swift 2)中验证了这一点。

您也在处理实例,我需要检查由其元类型表示的两种类型是否兼容。我没有这些类型的实例。在什么情况下,在没有实例的情况下检查类型(以及出于什么目的)?