簡體   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