确定对象是否是另一个类的子类

时间:2018-05-09 13:17:44

标签: ios swift

我有一些实验代码。但最终目标是findType()应该打印/返回true如果obj是'parent'类型

    func isTypeOf<T>(_ obj: Any, parent: T.Type) {
    if obj is T { // true
        print("true")
    }
}

isTypeOf(raceCar, parent: Car.self) // worked

func getType(parentClass: AnyClass){
    isTypeOf(raceCar, parent: parentClass)
}
getType(parentClass: Car.self) // this dont work.

这怎么可以实现?

使用模板建议,

editTextSpieler[i].getLayoutParams().width = dWidth/(anzahl_Spieler + 1);
editTextSpieler[i].setHint("Name");
//Move to last line in the loop.
tableRow.addView(editTextSpieler[i]);

3 个答案:

答案 0 :(得分:3)

您可以使用泛型来获取类型:

func findType<T>(_ obj: Any, parent: T.Type) {
    print(type(of: obj)) // RacingCar
    print(parent) // Car
    print(type(of: obj) == parent) // false
    if obj is T { // true
        print("true")
    }
}

findType(raceCar, parent: Car.self)

或者,您可以直接传入parent对象,然后它将如下所示:

func findType<T>(_ obj: Any, parent: T) {
    print(type(of: obj)) // RacingCar
    print(type(of: parent)) // Car
    print(type(of: obj) == T.self) // false
    if obj is T {
        print("true")
    }
}

let car = Car()
findType(raceCar, parent: car)

答案 1 :(得分:1)

为什么不放弃:

raceCar is Car

这将返回true。

答案 2 :(得分:1)

根据Apple Documentation您可以使用type(of:)

  

返回值的动态类型。

     

<强>讨论

     

您可以使用类型(of :)函数来查找a的动态类型   值,特别是当动态类型与静态不同时   类型。值的静态类型是已知的编译时类型   价值。值的动态类型是值的实际类型   运行时,可以嵌套在其具体类型中。

     

在下面的代码中,count变量具有相同的static和   动态类型:Int。当count传递给printInfo(_ :)函数时,   但是,value参数的静态类型为Any(类型   声明参数)和动态类型的Int。

let type = type(of: value as Any)
print("'\(value)' of type '\(type)'")