seb*_*mel 6 generics protocols swift
我希望能够声明这样的协议:
protocol TypedHashable {
typealias Type
}
Run Code Online (Sandbox Code Playgroud)
并在像这样的where子句中使用它:
class UsingTypedHashable<K: TypedHashable, V: TypedHashable where K.Type == V.Type> {
...
}
Run Code Online (Sandbox Code Playgroud)
由于我无法看到的原因,编译器在"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
}
Run Code Online (Sandbox Code Playgroud)
(注意:来自https://schani.wordpress.com/author/schani/的代码)
前面的代码使用序列协议的Sequence声明的关联类型,其名称为"GeneratorType".
任何的想法?
问题是您正在使用保留字Type。尝试使用其他名称,例如HashType,它编译得很好。
请参阅 Swift 编程语言中的“元类型类型”:
类、结构或枚举类型的元类型是该类型的名称后跟
.Type。
您可能应该在线上typealias而不是class在线上收到编译器错误,并且您可能希望对此打开雷达。
| 归档时间: |
|
| 查看次数: |
1322 次 |
| 最近记录: |