如果Type与另一个兼容,则进行Swift测试

时间:2015-09-12 08:26:06

标签: swift

想象一下以下情况:

class Car {
}

class Mercedes: Car {
}

let aCarType: Any.Type = Mercedes.self

我如何测试aCarType 中表示的类型是否从Car继承

aCarType is Car.Type
当然,

总是返回false。

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

3 个答案:

答案 0 :(得分:1)

你试过这个吗?

if let carType = type as? Car.Type {

}

答案 1 :(得分:1)

使用is运算符和Type属性,检查类是否等于或等于另一个类的子类的Swift方法。这是一个例子:

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 is Car.Type始终评估为true。我确认在最新版本的Xcode 6(Swift 1.2)和Xcode 7(Swift 2)中确实存在这种情况。

答案 2 :(得分:0)

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

class Car {}

class Mercedes: Car {}

let SLK = Mercedes()

SLK is Car // --> true
SLK is Mercedes // --> true

但是,如果要检查特定类而不是其超类,请使用dynamicType,这相当于Objective-C中的isMemberOfClass

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