Big*_*Bro -2 inheritance swift
我有一个基于某种类型的泛型类,以及一个指定该类型的子类。然而,Swift 编译器似乎无法将具有正确类型的父类向下转换为子类。
我很惊讶,因为这似乎是一个合理的需求。
例如
class MyClass<T> {}
class ChildClass: MyClass<Double> {}
func test() {
let instance = MyClass<Double>()
let castedInstance: ChildClass = instance as! ChildClass
}
Run Code Online (Sandbox Code Playgroud)
此代码引发运行时错误:Could not cast value of type 'MyClass<Swift.Double>' (0x1f3e449f0) to 'ChildClass' (0x1024f58b0).
有没有办法以正确的方式施放它,或者由于某种原因被禁止?我有什么误解吗?
看来您对继承的工作原理存在误解。您无法使用类型转换来转换对象的类型,无论是向上转换还是向下转换。
仅当您尝试转换的对象被声明/存储为更通用的类型(例如父类)时,才能使用向下转型,但它可能包含更专门的实例(子类)。但是,您正在声明一个父实例,然后尝试将其向下转换为子类。这永远行不通,因为实例是不同类型的。
如果您声明父类类型的变量,但为其分配子类实例,则您的示例将有效。
func test() {
let instance: MyClass<Double> = ChildClass()
let castedInstance: ChildClass = instance as! ChildClass
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |