![](/img/trans.png)
[英]How to constrain a Swift generic type parameter to be any protocol and another parameter to conform to it?
[英]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.