首页 > 解决方案 > Swift - 检查两个对象是否属于相同类型或超类类型

问题描述

我想检查两个对象是否属于 - 或属于 - 同一个超类。

class myClass {}
class mySubclass: myClass {}

let myObject = myClass()
let myOtherObject = myClass()
let mySubclassedObject = mySubclass()

我知道我可以通过这种方式检查类型:

type(of: myObject) == myClass.self                // true
type(of: myObject) == type(of: myOtherObject)     // true

type(of: mySubclassedObject) == myClass.self      // false

最后一条语句返回 false,type(of: <T>)显然返回对象的最终类。

类型检查的另一种方法是is关键字:

mySubclassedObject is mySubclass     // true
mySubclassedObject is myClass        // true 

这里两个语句都评估为真,因为is关键字显然是在考虑超类。但我不能这样做是比较两个对象的类型,如下所示:

myOtherObject is myObject   // Use of undeclared type 'myObject'

我需要得到这样的结果:

myObject is myOtherObject        // true 
mySubclassedObject is myObject   // true
myObject is mySubclassedObject   // false

我希望能找到类似的东西,.isSubclassOf但这在 Swift 中似乎不可用。那么我怎样才能得到我想要的结果呢?

标签: swifttypessubclass

解决方案


一种方法是尝试这样的泛型

func isObject<P>(_ object: Any, ofType other: P) -> Bool {
    object is P
}

isObject(myObject, ofType: myOtherObject)           //true
isObject(mySubclassedObject, ofType: myObject)      //true
isObject(myObject, ofType: mySubclassedObject)      //false

推荐阅读