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
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage