2016-06-11 63 views
1

宣言比方說,我有一個泛型類:斯威夫特:在泛型類

class SomeClass<Element> { 
    // What is the difference between this: 
    var array: [SomeClass]! 

    // and this declaration: 
    var array2: [SomeClass<Element>]! 
} 

是什麼的聲明之間的區別?

+1

這似乎是他們完全一樣,只爲'array'泛型參數推斷。雖然我在語言參考中找不到它。 – Sulthan

+1

看起來像沒有 - 我會期待有所不同,但它似乎是相同的。 – luk2302

+2

請注意,您可以通過點擊Xcode中的屬性來查看它推斷的類型是什麼 - 實際上它們看起來是一樣的。當在其自己的聲明中引用泛型類時,似乎是類型推斷的特例。 – Hamish

回答

4

如果沒有泛型參數,泛型類型就不能存在,因此省略泛型類型意味着您希望編譯器推斷該類型。

在這種情況下,要推斷的邏輯類型是Element

請注意,這僅適用於您在SomeClass聲明中使用SomeClass。它不適用於不同的通用類。

的通用參數類似的推理可以在變量聲明中使用:

let instance: SomeClass = SomeClass<Int>() 
let array: Array = [1] // Array<Int>