Swift:使用泛型类型约束返回类

时间:2016-05-29 09:48:37

标签: swift generics

我有一个基本的通用类:

class SharedClass<T> {}

和它的建设者:

class SharedClassBuilder {
    func build<T>() -> SharedClass<T>? {
        return ...
    }
}

我希望能够做的是返回一个继承SharedClass并符合T的实例。例如:

protocol MyObject {
    func doIt()
}

var result: SharedClass<MyObject>? = SharedClassBuilder().build()
result?.doIt()

不幸的是,Swift编译器抱怨返回的类型没有名为doIt的成员。

有没有办法实现我正在寻找的东西?

1 个答案:

答案 0 :(得分:1)

我怀疑并不是因为你希望返回的类受泛型类型的限制,因为你要求返回的类是实例约束类型。在您的代码段中,您希望展开的result符合MyObject。更进一步,这意味着SharedClass的一致性完全取决于它的构造方式。据我所知,Swift不支持。

然而,没有什么可以阻止你让SharedClass的成员成为T。有点像:

class SharedClass<T>  {
    var v : T?
}

class SharedClassBuilder {
    func build<T>() -> SharedClass<T>? {
        return SharedClass()
    }
}

protocol MyObject {
    func doIt()
}

var result: SharedClass<MyObject>? = SharedClassBuilder().build()
result?.v?.doIt()