Swift在子协议

时间:2018-04-20 12:53:16

标签: swift protocols

我们说我有以下协议:

protocol Driver {
    associatedtype Car
}

与继承自Driver的协议相比,明确将Car设置为RaceCar类型。

protocol RacingDriver: Driver {
    typealias Car = RaceCar
}

为什么我仍然会收到错误

  

protocol' RacingDriver'只能用作通用约束   因为它有自我或相关的类型要求

在做var driver: RacingDriver时?

背景故事:

基本上我想要的是一个变量,它可以是符合Driver的任何类型,只要该类型的Car被定义为RaceCar

示例:

protocol Driver {
    associatedtype Car
}

protocol RacingDriver: Driver {
    typealias Car = RaceCar
}

struct NascarDriver: RacingDriver {}
struct IndyDriver: RacingDriver {}

struct NormalDriver: Driver {}

var racingDriver: RacingDriver // This could be either a NascarDriver or IndyDriver but not a NormalDriver!

我怎么能实现这个目标?

除了类型擦除之外还有其他方法吗?

我想避免从RacingDriver基类进行子类化。

提前致谢!

0 个答案:

没有答案