繁体   English   中英

使用swift使用泛型参数转换结构

[英]Casting struct with generic parameter with swift

我正在尝试做以下事情。

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]

没有用快速的泛型做太多的工作,但快速查看快速的文档

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(游乐场有一些问题处理它)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM