如何测试实例是否是Swift中的特定类或类型?

时间:2014-08-24 22:00:25

标签: swift

Objective-C有两种方法来测试对象是特定类或子类的实例:

- (BOOL)isMemberOfClass:(Class)aClass;
  

返回一个布尔值,指示接收器是否为   给定类的实例。

- (BOOL)isKindOfClass:(Class)aClass;
  

返回一个布尔值,指示接收器是否为   给定类的实例或继承自的任何类的实例   那个班。

在Swift中,我可以使用is运算符来测试后者:

if myVariable is UIView {
    println( "I'm a UIView!")
}

if myVariable is MyClass {
    println( "I'm a MyClass" )
}

如何测试实例是否是Swift中的特定类或类型(即使在处理没有NSObject子类时)?

注意:我知道func object_getClassName(obj: AnyObject!) -> UnsafePointer<Int8>

3 个答案:

答案 0 :(得分:6)

请参阅我的回答(可能重复)https://stackoverflow.com/a/26365978/195691: 现在可以比较Swift中动态类型的标识:

myVariable.dynamicType === MyClass.self

答案 1 :(得分:2)

Swift 3+我们可以使用type(of:T)函数来做到这一点。

let view = UIView()
if type(of: view) == UIView.self {
    print("view isMember of UIView")
}

答案 2 :(得分:0)

除了object_getClassName()之外,还可以通过结合object_getClass()

使用定义相等来维护不变量。
object_getClass(X()) === object_getClass(X()) // true
object_getClass(X()) === object_getClass(Y()) // false