我希望能够声明这样的协议:
protocol TypedHashable { typealias Type }
并在像这样的where子句中使用它:
class UsingTypedHashable<K: TypedHashable,V: TypedHashable where K.Type == V.Type> { ... }
由于我无法看到的原因,编译器在“K.Type”点下给出了以下错误:
Expected ‘:’ or ‘==’ to indicate a conformance or same-type requirement
我已经看到使用协议中使用typealias声明的关联类型的代码访问类型断言的where子句中的那些typealias.下面是一些使用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声明的关联类型,其名称为“GeneratorType”.
任何的想法?