[英]Access associated type of a custom protocol in a where clause on generic types in Swift
我希望能夠聲明這樣的協議:
protocol TypedHashable {
typealias Type
}
並在這樣的where子句中使用它:
class UsingTypedHashable<K: TypedHashable, V: TypedHashable where K.Type == V.Type> {
...
}
由於某種原因,我看不到,編譯器在“ K.Type”點下給了我以下錯誤:
預期的':'或'=='表示符合性或同類型要求
我已經看到代碼使用在協議中訪問where子句中的類型別名的協議中使用類型別名聲明的關聯類型的代碼。 這是一些編譯的代碼,這些代碼使用Swift標准協議Sequence(和Generator ...)來執行:
func toArray<S : Sequence,
T where T == S.GeneratorType.Element>
(seq : S) -> T[] {
var arr = T[]()
for x in seq {
arr.append(x)
}
return arr
}
(注意:來自https://schani.wordpress.com/author/schani/的代碼)
前面的代碼使用了Sequence協議的Sequence聲明的關聯類型,其名稱為“ GeneratorType”。
任何的想法?
問題是您正在使用保留字Type
。 嘗試使用其他名稱(例如HashType
,它可以正常編譯。
請參見Swift編程語言中的“元類型類型”:
類,結構或枚舉類型的元類型是該類型的名稱,后跟
.Type
。
您可能應該在typealias
行而不是在class
行上typealias
編譯器錯誤,並且您可能想在此打開雷達。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.