hod*_*dez 7 generics ios swift
我正在尝试做以下事情.
protocol Vehicle {
}
class Car : Vehicle {
}
class VehicleContainer<V: Vehicle> {
}
let carContainer = VehicleContainer<Car>()
let vehicleContainer = carContainer as VehicleContainer<Vehicle>
Run Code Online (Sandbox Code Playgroud)
但是我在最后一行得到了编译错误:
'Car' is not identical to 'Vehicle'
Run Code Online (Sandbox Code Playgroud)
这有什么解决方法吗?
另外我认为这种类型的转换应该是可能的,因为我可以使用基于泛型的数组来实现.以下作品:
let carArray = Array<Car>()
let vehicleArray = carArray as Array<Vehicle>
Run Code Online (Sandbox Code Playgroud)
在 Playground 中快速扩展数组示例可以按预期进行
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]
Run Code Online (Sandbox Code Playgroud)
没有对 swift 泛型做太多工作,但快速查看swift 文档
struct Stack<T: Vehicle> {
var items = [Vehicle]()
mutating func push(item: Vehicle) {
items.append(item)
}
mutating func pop() -> Vehicle {
return items.removeLast()
}
}
Run Code Online (Sandbox Code Playgroud)
并使用车辆代替通用 T 型
var vehicleStack = Stack<Vehicle>()
vehicleStack.push(Car())
vehicleStack.push(Boat())
var aVehicle = vehicleStack.pop()
Run Code Online (Sandbox Code Playgroud)
似乎在应用程序中编译 aok (尽管 Playground 在处理它时遇到了一些问题)