【发布时间】:2020-06-09 05:25:21
【问题描述】:
我可以创建一个enum 泛型(每种情况的类型不同),以便我可以使用它的情况来推断泛型类的类型吗?
我这里有一个例子:
class Config {
let name: String
init(_ name: String) {
self.name = name
}
}
class CarConfig: Config {
static let sports = CarConfig("sports")
static let van = CarConfig("van")
}
class BikeConfig: Config {
static let road = BikeConfig("road")
static let mtb = BikeConfig("mtb")
}
enum VehicleType {
case car, bike, scooter
}
class Vehicle<C: Config> {
let type: VehicleType
let config: C
init(type: VehicleType, config: C) {
self.type = type
self.config = config
}
}
let bike = Vehicle(type: .bike, config: BikeConfig.mtb)
bike.config.name // mtb
我想做的是像这样启动一个载具:
let bike = Vehicle(type: .bike, config: .mtb)
我希望编译器推断出BikeConfig,所以我可以省略它。我希望编译器知道带有type == VehicleType.bike 的Vehicle 总是有一个Config,即BikeConfig。
显然我必须更改我的Vehicle:
class Vehicle<C: Config> {
let type: VehicleType<C>
let config: C
init(type: VehicleType<C>, config: C) {
self.type = type
self.config = config
}
}
现在制作enum VehicleType enum VehicleType<C: Config>。
不知道从这里去哪里。有什么帮助吗? :)
[更新:将scooter 的情况添加到VehicleType]
【问题讨论】:
标签: swift generics enums type-inference inference