我有父/基类,如下所示:
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).
答案 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
}