向下转型失败
Downcasting fails
我遇到了一些不寻常的向下铸造失败。
我在FrameworkA
中有一个classVehicle
框架A
open class Vehicle {
open var name: String = ""
}
我在其他项目中 class 编辑了这个 Vehicle
class。
项目
import FrameworkA
class Car: Vehicle {
var maker: String = ""
}
我试过这样沮丧
let vehicle = Vehicle()
let car = vehicle as! Car
如果它们在同一框架(或同一项目名称空间)中,则没有问题,但在这种情况下,从 Vehicle
向下转换为 Car
会失败。
报错信息如下。
Could not cast value of type 'FrameworkA.Vehicle' (0x1070e4238) to 'Project.Car' (0x10161c120).
所以我不得不使用 Vehicle
class 的扩展并使用 associatedObject。有没有办法subclass和downcast?
这不是沮丧...Car
是 Vehicle
,但 Vehicle
不是 Car
。
当然你的代码失败了。与使用框架无关
Car
是一种特殊的 Vehicle
。您正在创建一个 Vehicle
对象。然后您尝试将其转换为 Car
。但它不是 Car
。这是一个 Vehicle
.
以下作品:
let car = Car()
let vehicle: Vehicle = car
没关系,因为您创建了一个 Car
,它也是一个 Vehicle
。
您也可以这样做:
let vehicle: Vehicle = Car()
let car = vehicle as! Car
这是可行的,因为即使 vehicle
被声明为 Vehicle
,它实际指向的对象是 Car
.
我遇到了一些不寻常的向下铸造失败。
我在FrameworkA
Vehicle
框架A
open class Vehicle {
open var name: String = ""
}
我在其他项目中 class 编辑了这个 Vehicle
class。
项目
import FrameworkA
class Car: Vehicle {
var maker: String = ""
}
我试过这样沮丧
let vehicle = Vehicle()
let car = vehicle as! Car
如果它们在同一框架(或同一项目名称空间)中,则没有问题,但在这种情况下,从 Vehicle
向下转换为 Car
会失败。
报错信息如下。
Could not cast value of type 'FrameworkA.Vehicle' (0x1070e4238) to 'Project.Car' (0x10161c120).
所以我不得不使用 Vehicle
class 的扩展并使用 associatedObject。有没有办法subclass和downcast?
这不是沮丧...Car
是 Vehicle
,但 Vehicle
不是 Car
。
当然你的代码失败了。与使用框架无关
Car
是一种特殊的 Vehicle
。您正在创建一个 Vehicle
对象。然后您尝试将其转换为 Car
。但它不是 Car
。这是一个 Vehicle
.
以下作品:
let car = Car()
let vehicle: Vehicle = car
没关系,因为您创建了一个 Car
,它也是一个 Vehicle
。
您也可以这样做:
let vehicle: Vehicle = Car()
let car = vehicle as! Car
这是可行的,因为即使 vehicle
被声明为 Vehicle
,它实际指向的对象是 Car
.