任何类型的Swift泛型

时间:2016-05-12 10:27:17

标签: swift generics

我有这样的课程:

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<>>')

1 个答案:

答案 0 :(得分:2)

简单解决方案

如果您希望BaseFirst作为通用类型,那么为什么使用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下面的评论,了解更多使用我的代码的方法。