想象一下以下情况:
class Car {
}
class Mercedes: Car {
}
let aCarType: Any.Type = Mercedes.self
我如何测试aCarType
中表示的类型是否从Car
继承?
aCarType is Car.Type
当然,总是返回false。
在我的情况下,Objective-C动态是不可能的! aCarType
填充在我无法控制的代码中。
答案 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