如何在Swift中对泛型应用继承

时间:2015-10-07 16:49:47

标签: swift generics inheritance

我有一个通用的Container结构,它存储为实现如下协议的类的容器:

protocol Protocol {}
class Class : Protocol {}
struct Container<Element> {
    var value:Element
    init(_ v:Element) { value = v }
}
class Example {
    var container : Container<Class>
    init() { container = Container(Class()) }
    func getContainer() -> Container<Protocol> { return container }
}

然而,当我通过它时,我想将它作为仅在return container生成错误的协议的容器传递:

Cannot convert return expression of type 'Container<Class>' to return type 'Container<Protocol>'

我知道这应该是可能的,因为Swift使用如下的数组:

class ArrayExample {
    var arrayContainer : [Class]
    init() { arrayContainer = [Class()] }
    func getArrayContainer() -> [Protocol] { return arrayContainer }
}

所以有人对如何实现Container有任何想法,以便转换/复制不会产生错误

1 个答案:

答案 0 :(得分:0)

目前还不清楚你实际想要完成什么,但这里的代码编译并涵盖到目前为止你所表达的所有目标:

protocol Protocol {}
class Class : Protocol {
    var thing : AnyObject?
}
class Container<Element> {
    var value:Element
    init(_ v:Element) { value = v }
}
class Example {
    var container : Container<Protocol>
    init() { container = Container(Class()) }
    func getContainer() -> Container<Protocol> { return container }
    func doStuff() {
        if let v = container.value as? Class { v.thing = "ha" }
    }
}