在Swift中,如何在类型参数受协议约束的泛型类中使用关联类型?
问题描述:
在斯威夫特,我有一个协议是这样的:在Swift中,如何在类型参数受协议约束的泛型类中使用关联类型?
protocol P {
associatedtype T
func f(val:T)
}
我想定义一个类是这样的:
class B<X:P> {
}
然后是B类中使用的associatedtype
牛逼
我已经试过这样:
class B<X:P> {
var v:T // compiler says "Use of undeclared type"
init() {
}
}
我也三编辑此:
class B<X:P, Y> {
typealias T = Y
var v:T
init() {
}
func g(val:X) {
val.f(val: v) // compiler says "Cannot invoke 'f' with an argument list of type '(val:Y)'
}
}
有什么建议吗?
答
T
是占位符类型X
的关联类型,因此您将其引用为X.T
。例如:
class B<X: P> {
var v: X.T
init(v: X.T) {
self.v = v
}
func g(x: X) {
x.f(val: v)
}
}
谢谢!这就是它! –