【发布时间】:2019-09-05 13:57:48
【问题描述】:
我有以下设置:
protocol Resource : Codable {}
class A<T> {}
extension A where T : Codable {
func doThingWithCodable() {}
}
let a = A<Resource>()
a.doThingWithCodable()
//Error: Protocol type 'Resource' cannot conform to Codable because
//only concrete types can conform to protocols.
我了解错误消息,并且阅读了许多关于泛型、协议和条件一致性的问答。我有许多符合Resource 协议的类,所以如果有办法让A<Resource> 知道它将始终使用符合Codable 的具体类型,那将非常方便,所以我仍然可以拥有A<Resource> 的一个实例,并且该实例可以访问其条件Codable 方法。我确实考虑过创建一个像A<Codable> 这样的实例,但我也需要Resource 协议中的一些属性。
除了为每个符合Resource 的具体类型创建一个A 的新实例之外,还有什么快速的方法可以解决这个问题吗?
【问题讨论】:
标签: swift