我有这样的课程:
class Base<T> {
}
class First:Base<Int> {
}
class Second:Base<Double> {
}
如何声明类型Base
能够分配给它First
对象
当我尝试Any
时,它不起作用:
class Test {
var base:Base<Any>
init(_ base: Base<Any>) {
self.base = base
}
}
Test(First())
它给了我:
Cannot convert value of type 'First' to expected argument type 'Base<Any>' (aka 'Base<protocol<>>')
答案 0 :(得分:2)
如果您希望Base
将First
作为通用类型,那么为什么使用Any
?
此代码可以使用
class Test {
var base:Base<First> // <- this must be First instead of Any
init(_ base: Base<First>) {
self.base = base
}
}
但是,如果您希望Test
接受不同类型的Base<T>
,则应声明您的课程如下
class Test<T> {
var base:Base<T>
init(_ base: Base<T>) {
self.base = base
}
}
Test<Base<Int>>(Base())
请参阅@sargeras下面的评论,了解更多使用我的代码的方法。