我正在尝试做以下事情.
- protocol Vehicle {
- }
- class Car : Vehicle {
- }
- class VehicleContainer<V: Vehicle> {
- }
- let carContainer = VehicleContainer<Car>()
- let vehicleContainer = carContainer as VehicleContainer<Vehicle>
但是我在最后一行得到了编译错误:
- 'Car' is not identical to 'Vehicle'
这有什么解决方法吗?
另外我认为这种类型的转换应该是可能的,因为我可以使用基于泛型的数组来实现.以下作品:
- let carArray = Array<Car>()
- let vehicleArray = carArray as Array<Vehicle>
解决方法
在游乐场快速扩展您的数组示例按预期工作
- protocol Vehicle {
- }
- class Car : Vehicle {
- }
- class Boat: Vehicle {
- }
- var carArray = [Car]()
- var vehicleArray : [Vehicle] = carArray as [Vehicle]
- vehicleArray.append(Car()) // [__lldb_expr_183.Car]
- vehicleArray.append(Boat()) // [__lldb_expr_183.Car,__lldb_expr_183.Boat]
没有用快速的仿制药做太多的工作,但快速查看swift docs
- struct Stack<T: Vehicle> {
- var items = [Vehicle]()
- mutating func push(item: Vehicle) {
- items.append(item)
- }
- mutating func pop() -> Vehicle {
- return items.removeLast()
- }
- }
并使用车辆而不是通用类型T.
- var vehicleStack = Stack<Vehicle>()
- vehicleStack.push(Car())
- vehicleStack.push(Boat())
- var aVehicle = vehicleStack.pop()
似乎在应用程序中编译aok(操场上有一些问题处理它)