我的数据 struct 有这个语法问题.更糟糕的是,我不能详细谈论它.我受雇的公司经营公共交通部门,我在保密协议下,如果我发布任何太具体的东西,老板会杀了我的.我希望你能理解!
不过,我有一个完美的例子.没有任何不一致之处;) 好吧,好吧,确实有.然而,我相信,你们中的大多数人都足够聪明,能够理解这里的重要之处.
基本 struct :
class Propulsion {
var horsePower: Double
init(horsePower: Double) {
self.horsePower = horsePower
}
static let pedes = Propulsion(horsePower: 0.2)
}
class Motor: Propulsion {
var range: Double
init(range: Double, horsePower: Double) {
self.range = range
super.init(horsePower: horsePower)
}
static let otto = Motor(range: 1000, horsePower: 100)
static let electric = Motor(range: 400, horsePower: 200)
}
class Vehicle<P: Propulsion> {
var propulsion: P
init(propulsion: P) {
self.propulsion = propulsion
}
}
class Bicycle<P: Propulsion>: Vehicle<P> {
var hasFrontSuspension: Bool
init(hasFrontSuspension: Bool, propulsion: P) {
self.hasFrontSuspension = hasFrontSuspension
super.init(propulsion: propulsion)
}
}
class Car<P: Propulsion>: Vehicle<P> {
func rangePerHorsePower() -> Double where P: Motor {
propulsion.range / propulsion.horsePower
}
}
现在我想申报一个停车位.如下所示:
var carParkingSpot: ParkingSpot<Car<Motor>>
对于ParkingSpot
级的学生,我想到了这样的课程:
class ParkingSpot<V: Vehicle<P>> where P: Propulsion {
var vehicle: Vehicle<P>
init(vehicle: Vehicle<P>) {
self.vehicle = vehicle
}
func taxForRange() -> Double where P: Motor {
vehicle.propulsion.range * 50
}
}
从最后一点我得到了一堆
在作用域中找不到类型‘P’
这个也不起作用:
class ParkingSpot<V: Vehicle<P: Propulsion>>
应为">;"以完成泛型参数列表
不过,此实现可以正常工作:
class ParkingSpot<V: Vehicle<P>, P: Propulsion> {
var vehicle: Vehicle<P>
init(vehicle: Vehicle<P>) {
self.vehicle = vehicle
}
func taxForRange() -> Double where P: Motor {
vehicle.propulsion.range * 50
}
}
不过,我不想重复Motor
位:
var carParkingSpot: ParkingSpot<Car<Motor>, Motor>
我如何仅用一个泛型参数来实现这一点?