我有一个框架,其中包含, ,VehicleModels
等类。在另一个框架中,我需要在表格中打印自定义描述(特定于第二个框架)。所以我添加了带有方法的协议。然后我为所有车辆添加了协议扩展,例如:Car
Bike
Plane
VehicleInventory
DescriptableVehicle
describe()
extension Car: DescriptableVehicle {
func describe() -> String {
return "Car: \(self.vin)" // returns formatted vehicle number
}
}
然而,假设已经改变,现在我没有从我的车辆框架中公开具体的类。相反,我公开了 , 之类的协议CarProtocol
,BikeProtocol
因此通常我拥有相同的信息。
问题是我不能再使用协议扩展(或者至少不能以那种形式),因为与类扩展相反的协议扩展不能有继承子句。
知道如何解决这个问题而不是过多地修改我的用法吗?最初,我认为where
协议上的几个子句加上几个演员会达成交易,但是如果没有访问类,它就没有帮助。我也尝试过适配器和类型擦除,但要么我使用不当,要么它用于不同的目的。
为了说明问题,我准备了存储库:https ://github.com/wedkarz/SwiftProtocolExtensionsProblem
有两个游乐场。V1是我曾经拥有并且正在工作的版本。 V2包含我现在拥有的以及我正在努力实现的功能。
在现实生活中,类PrivateFramework
是一个单独的框架和协议:VehicleProtocol
, CarProtocol
, BikeProtocol
,PlaneProtocol
是其中的一部分,但DescriptableVehicle
不是的一部分PrivateFramework
,因此不能在内部使用。该示例说明了访问具体类型的问题及其扩展的问题。
你可以看到有一些扩展被注释掉了,因为我不能再使用它们了。[VehicleProtocol]
目标是以与以前类似的方式打印其内容的集合。