2017-09-13 14 views
0

タイトルが正確かどうかわかりません。更新される場合はコメントしてください。辞書の初期化とSwiftでの宣言の違いは何ですか?

一つの方法では、私はちょうど辞書を作成し、私はそれを作成し、すぐにキーと値のペアでそれを埋める他では()

でそれを初期化します。

違いは何ですか?一方が他方よりも優先されますか?

//initializing dictionary 
var airPortCodesInitialize = [Int: String]() 

//vs declaring 
var airPortCodes: [String: String] = ["SLC": "Salt Lake City", "LAX": "Los Angeles"] 
+0

それはあなたの条件に完全に依存しているが、しかし、違いはありません、我々は客観C、C、C++などの他のプログラミング言語でやっているのと同じように、これは、二つの異なる構文です。 –

+2

両方の形式で**と**を宣言すると、辞書が空になった後、いくつかの既定のキー値のペアで1回初期化されます。サイドノート:一般に、コンパイラから指示がない限り、型に注釈を付けるべきではありません。 – vadian

+1

要約すると、 '='の左側の部分が宣言です。 '= 'の右側の部分は初期化です。 Swiftでは、 '= 'の右側からの型推論は宣言の一部と考えることができますが、 – rmaddy

答えて

1

どちらの場合でも、辞書を宣言して初期化しています。唯一の違いは、最初の行が空の辞書を作成し、2行目がキー値のペアでいっぱいの辞書を作成することです。

1つの宣言は次のようになります。

var myDictionary: [String: String] 

私はこの答えの残りのために、私は上記の行と、あなたの最初の行を比較しますので、あなたが、何であるかを宣言誤解だと思います。

What is the difference?

あなたはそれを初期化せずに、すぐに宣言した後myDictionaryを使用しようとすると、コンパイラはあなたにエラーが発生しますので、1つの宣言では、変数には値を与えない:

print(myDictionary["Hello"]) // error 

Is one prefered over the other?

のほとんどをあなたがしたのと同じ行に初期化と宣言を置くべきです。

var airPortCodesInitialize = [Int: String]() 

これは読みやすくなっています。

場合によっては、値に応じて定数辞書の初期値が異なることがあります。そして、あなたは宣言と初期化区切る必要があります。

let myConstantDict: [String: String] 
switch something { 
case .foo: 
    myConstantDict = ... 
case .bar: 
    myConstantDict = ... 
} 
+0

偉大な答えは、非常に明確で、あなたはより良い方向に私を指すのに役立ちました。ありがとう。 –

関連する問題