繁体   English   中英

当特殊类型受附加协议约束时,Swift 无法特殊化泛型参数

[英]Swift cannot specialize generic parameter when the specializing type is constrained with additional protocol

想象以下场景:

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类型的。 然而, Animal类的通用参数T不能特化为Food & Growable类型。 这是为什么?

错误消息有点奇怪,但您尝试执行的操作无效。

您不能使用协议创建泛型。 创建泛型时,您必须使用具体类型 不是协议。

Food & Growable不是一个具体的类型

你需要一个子类:

class GrowableFood: Food, Growable {
   ...
}

let animal2 = Animal<GrowableFood>()

或者,如果Food is Growable ,您可以扩展Animal

extension Animal where T: Growable {
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM