从父/基类到子类的Swift类型转换

时间:2015-10-06 04:42:59

标签: ios swift oop inheritance

我有父/基类,如下所示:

class Base {
    ...
}

另外,让孩子课程如下:

class Child: Base {
    ...
    func someFunc() {

    }
}

我已经创建了Parent类的实例,如下所示:

let baseObj = Base()

现在,我想从父对象中调用Child类的方法。所以我有如下代码:

let childObj = baseObj as! Child
childObj.someFunc()

但是这给我的运行时崩溃如下:

Could not cast value of type 'PCTests.Base' (0x11c6ad150) to 'PCTests.Child' (0x11c6ab530).

3 个答案:

答案 0 :(得分:5)

错误说明了一切......你不能将父类型转换为子对象。这不是继承如何运作。

答案 1 :(得分:0)

你可以通过实际创建子类的对象来实现这一点,并且你应该以这种方式保持结构,因为这是Base和子类的核心概念,如果你这样做,它应该工作:

let baseObj = Child()

现在在基类中,您可以执行以下操作

let childObj = self as! Child
childObj.someFunc()

someFunc在子类中定义。

P.S。我很高兴澄清它是否对你有意义,谢谢

答案 2 :(得分:-1)

let childObj = baseObj
switch childObj {
    case let _child as Child: 
        _child.someFunc()
    default: break
}