2016-06-11 73 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>