Swift - 检查两个对象是否具有相同类型或父类(super class)类型

标签 swift types subclass

我想检查两个对象是否属于或属于同一父类(super class)。

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 

这里两个语句的计算结果均为 true,如 is关键字显然正在考虑父类(super class)。但我不能这样做的是比较两个对象的类型,如下所示:

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

我需要得到这样的结果:

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

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

最佳答案

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

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

关于Swift - 检查两个对象是否具有相同类型或父类(super class)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64973904/

相关文章:

swift - 我用 github/fusuma opensource 拍摄的照片旋转了 90 度

java - 如何测试一个java类是否在运行时扩展了另一个?

c# - 方法返回父类(super class)列表而不是子类

java - 是否存在推断协方差

ios - Swift:将 [String] 拆分为具有给定子数组大小的 [[String]] 的正确方法是什么?

swift - 错误 : '...' is not a prefix unary operator

ios - 在 firebase 中存储值时无法使用 userID 作为键

sql-server - 获取 SQL Server 中列的类型

methods - 使用函数名作为参数

c# - 为什么我的 Lambda 查询返回匿名类型而不是 Linq 的强类型返回值?