2017-09-13 70 views
0

不知道我的標題是否準確。如果更新,請發表評論。初始化字典和在Swift中聲明有什麼區別?

在一種方法中我剛創建的字典,並用()

初始化它在其它I創建它,並立即用一個鍵值對填充它。

有什麼區別?一個人比另一個人更喜歡嗎?

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

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

這完全取決於你的需求但是沒有區別,這是兩種不同的語法,就像我們在其他編程語言如目標C,C,C++都在做。 –

+2

這兩種形式都聲明**和**,一旦有空,就用一些默認鍵值對初始化字典。附註:通常你不應該註釋類型,除非編譯器告訴你這樣做。 – vadian

+1

簡而言之,'='左邊的部分就是聲明。 '='右邊的部分是初始化。儘管使用Swift,你可以說''''右邊的類型推斷可以被認爲是聲明的一部分。 – rmaddy

回答

1

在這兩種情況下,您都在聲明一個字典並對其進行初始化。唯一的區別是第一行創建一個空字典,第二行創建一個填充了鍵值對的字典。

單一的聲明如下所示:

var myDictionary: [String: String] 

我想你是誤會是什麼聲明,所以對於這個答案的其餘部分,我會比較上述線和您的第一道防線。

What is the difference?

一個單獨的聲明給人的變量沒有價值,因此,如果您嘗試使用myDictionary聲明後,立即在初始化之前,編譯器給你一個錯誤:

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

很好的答案,很清楚,你幫助我指出了一個更好的方向。謝謝。 –

相關問題