2014-10-07 16 views
1

我有一個類看起來是這樣的:初始化通過關鍵字`self`泛型類中的一類功能

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?>() 
} 

但很明顯,這是不合法的編譯器。

回答

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?>() 
} 
+0

THX答覆。我在更新中寫下了我想要的內容。 – CopperCash 2014-10-08 09:11:25