想象一下以下场景:
class Food {}
protocol Growable {}
class Animal<T: Food> {}
let animal1 = Animal<Food>() // Ok
let animal2 = Animal<Food & Growable>() // Compile error: 'Animal' requires that 'Food & Growable' inherit from 'Food'显然,如果我们有一个Food & Growable类型的变量,那么这个变量也是Food类型的。然而,T类的泛型参数Food & Growable不能与Food & Growable类型进行专门化。为什么会这样呢?
发布于 2019-06-24 08:15:19
错误消息有点奇怪,但是您试图做的是无效的。
不能使用协议创建泛型。创建泛型时,必须使用具体类型。不是协议。
Food & Growable不是一个具体的类型。
您需要一个子类:
class GrowableFood: Food, Growable {
...
}
let animal2 = Animal<GrowableFood>()或者,如果Animal是Growable,则可以扩展Growable
extension Animal where T: Growable {
}https://stackoverflow.com/questions/56732395
复制相似问题