2016-06-11 9 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のプロパティをAltキーを押しながらクリックすると、タイプが推測されているものが表示されます(実際は同じように見えます)。独自の宣言の中でジェネリッククラスを参照するときに、型推論の特別なケースと思われます。 – Hamish

答えて

4

ジェネリック型は、汎用引数なしでは存在できません。したがって、ジェネリック型を省略すると、コンパイラで型を推論する必要があります。

この場合、推論される論理タイプはElementです。

これは、SomeClassSomeClass宣言内に使用したためにのみ有効です。別の汎用クラスではうまくいかないでしょう。

ジェネリック引数の同様の推論は、変数の宣言に使用することができます。

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