如何将 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 constrained to non-protocol type Character"。这是一个无赖,伙计。我想到了两种可能性:

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) {}
}