看一下以下假设代码:
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
通过扩展来实现。 (这可能也更安全。)这可能是我实际采取的方法,但我想知道是否有人知道除了这个限制以外的方法吗?
答案 0 :(得分:12)
尝试:
class Stream<S: SequenceType where S.Generator.Element == Character> {
// ^^
init(_ sequence: S) {}
}