在类函数中通过关键字“self”初始化泛型类

时间:2014-10-07 23:54:45

标签: ios swift

我有一个类看起来像这样:

class MyContainer<T>  {
    required init() {}

    class func giveMeAContainer() -> MyContainer<Any?> {
        let container: MyContainer<Any?> = self()
        return container
    }
}

我从编译器'T' is not identical to 'Any?'收到错误。

我尝试了self<Any?>(),但显然这不是合法的语法。

那么,我可以通过类函数中的关键字self初始化泛型类吗?

---更新0

我希望通过此函数返回类型MyContainer<Any?>的值。

但是,当我创建子类时,我不想覆盖此函数以返回MyChildContainer<Any?>继承MyContainer<T>

我相信MyChildContainer<Any?>MyContainer<Any?>。所以这在逻辑上是合法的。

---更新1

我意识到我想要的是

class func giveMeAContainer() -> Self<Any?> {
    return self<Any?>()
}

但显然,这对编译器来说是不合法的。

1 个答案:

答案 0 :(得分:0)

你想做什么?

您要退回self()吗?

class func giveMeAContainer() -> MyContainer<T> {
    let container: MyContainer<T> = self()
    return container
    // or
    // return self()
}

您要返回MyContainer<Any?>

吗?
class func giveMeAContainer() -> MyContainer<Any?> {
    let container: MyContainer<Any?> = MyContainer<Any?>()
    return container 
    // or
    // return MyContainer<Any?>()
}