簡體   English   中英

在Swift中泛型類型的where子句中訪問自定義協議的關聯類型

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM