2017-06-23 65 views
2

在斯威夫特,我有一个协议是这样的:在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)' 
    } 
} 

有什么建议吗?

回答

3

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) 
    } 
} 
+0

谢谢!这就是它! –

相关问题