Могу ли я создать enum
generi c (разные типы для каждого случая), чтобы я мог использовать его случаи, чтобы вывести тип для класса generi c?
У меня есть пример здесь:
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
, чтобы я мог его опустить , Я хочу, чтобы компилятор знал, что Vehicle
с type == VehicleType.bike
всегда имеет 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>
.
Не знаю, откуда отсюда go. Любая помощь? :)
[ОБНОВЛЕНИЕ: добавлено scooter
кейс для VehicleType
]