[英]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.