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

Kla*_*aas 5 swift

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

- (BOOL)isMemberOfClass:(Class)aClass;
Run Code Online (Sandbox Code Playgroud)

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

- (BOOL)isKindOfClass:(Class)aClass;
Run Code Online (Sandbox Code Playgroud)

返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例.

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

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

if myVariable is MyClass {
    println( "I'm a MyClass" )
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*lav 6

请参阅我的答案(可能重复)/sf/answers/1845618491/:现在可以比较Swift中动态类型的标识:

myVariable.dynamicType === MyClass.self
Run Code Online (Sandbox Code Playgroud)


Har*_*war 6

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

let view = UIView()
if type(of: view) == UIView.self {
    print("view isMember of UIView")
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*aFi 0

除了 之外object_getClassName(),不变量还可以通过结合使用定义等式来维护object_getClass()

object_getClass(X()) === object_getClass(X()) // true
object_getClass(X()) === object_getClass(Y()) // false
Run Code Online (Sandbox Code Playgroud)