簡體   English   中英

如何將Swift協議約束為具體類型?

[英]How can I constrain a Swift protocol to a concrete type?

看看下面的假設代碼:

class Stream<S: SequenceType where S.Generator.Element: Character> {
    init(_ sequence: S) {}
}

不編譯。 我得到“S.Generator.Element約束到非協議類型字符”。 這真是個無賴,男人。 我想到了兩種可能性:

class Stream<S: SequenceType where S.Generator.Element: ExtendedGraphemeClusterLiteralType> {
}

這種約束是有效的,因為Character是我所知道的唯一實現該協議的東西。 問題是,現在我有一個ExtendedGraphemeClusterLiteralType而不是一個Character所以我被迫投射,我可以忍受。

另一種可能性就是定義我自己的協議,例如CharacterType ,並讓Character通過擴展實現。 (這可能也更安全。)這可能是我實際采取的方法,但我想知道是否有人知道除了這個限制之外的方法嗎?

嘗試:

class Stream<S: SequenceType where S.Generator.Element == Character> {
//                                                     ^^
    init(_ sequence: S) {}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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