Konkrete Unterklasse kann nicht zum Implementieren einer Eigenschaft im Protokoll in Swift verwendet werden
Ich mache etwas Ähnliches wie das Bridge Pattern in Java,DriverType
Für ein Protokoll ist eine benannte Eigenschaft erforderlichvehicle
ein ... zu seinDrivable
Objekt,Drivable
ist auch ein Protokoll und wird von der Klasse 'Car' übernommen
protocol Drivable {
var speed: Double { get }
}
protocol DriverType {
var vehicle: Drivable { get }
}
class Car: Drivable {
var speed = 80.0;
var brand = "BMW"
}
class Driver: DriverType {
var vehicle: Car = Car() //Error: Type 'Driver' does not conform to protocol 'DriverType'
// This one works, but I have to downcast the property to 'Car' everytime I use it.
var vehicle: Drivable = Car() //Type 'Driver' does not conform to protocol 'DriverType'
}
Wenn ich das umsetzeDriver
Klasse, es ist sehr natürlich zu erklärenvehicle
Eigentum alsCar
. Aber dann bin ich auf das Problem gestoßen, das der Compiler denktDriver
passt sich nicht anDriverType
obwohlCar
entsprichtDrivable
perfekt.
AKTUALISIEREN:
Die Antwort von @Antonio ist solide, aber das ist es, was ich derzeit festgelegt habe. Es handelt sich nicht um eine generische Antwort für die Klasse.
protocol Drivable {
var speed: Double { get }
init()
}
protocol DriverType {
func vehicle() -> Drivable
}
class Car: Drivable {
var speed = 80.0;
var brand = "BMW"
required init() {}
}
class Driver: DriverType {
private var m_vehicle: Car = Car()
func vehicle() -> Drivable {
return m_vehicle
}
// Inside Driver class I use the m_vehicle property directly
}