我希望能够声明这样的协议:
protocol TypedHashable {
typealias Type
}
并在像这样的where子句中使用它:
class UsingTypedHashable<K: TypedHashable, V: TypedHashable where K.Type == V.Type> {
...
}
由于我无法看到的原因,编译器在“K.Type”点下给出了以下错误:
预期':'或'=='表示符合性或同类型要求
我已经看到使用协议中使用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” .
任何的想法?
1 回答
问题是你正在使用保留字
Type
. 尝试使用其他名称,如HashType
,它编译得很好 .请参阅Swift编程语言中的“元类型类型”:
您应该在
typealias
行而不是class
行上获得编译器错误,并且您可能想要打开雷达 .