2016-08-17 164 views
1

定義陣列剛拿到它可能是一個有點傻,但即時通訊一種新的編碼快速陣列的問題,就是這裏的代碼之間的區別:在斯威夫特

var items:[String] 

所以從這裏我認識你將變量'items'定義爲一個空數組字符串。項目是數組類型的

var items: [String] =() 

這裏要定義的項目,如空數組,但它不應該寫成:

var items = [String]() 

,或者這是本質上是相同的代碼

回答

4

此:

var items:[String] 

意味着您正在聲明名爲items的變量,它將成爲String實例數組。但是,您並未將該變量初始化爲任何初始值。由於您未聲明類型([String])是可選的([String]?),所以編譯器不會讓您在使用此變量進行初始化之前使用該變量,因此必須被初始化並且包含非零值由您的代碼使用。

此:

var items: [String] =() 

意味着你在聲明名爲items變量應該是String實例的數組,但你正在試圖與價值(),這在斯威夫特是Void的代名詞,以初始化它。編譯器不會允許這樣做。一個類似的有效符號是:var items: [String] = [],它使用一個未指定類型的空數組([])來初始化該值。由於您將items聲明爲String值的數組,因此編譯器可以推斷出無類型的空數組([])應該是String值([String])的空數組並且將允許它。

此:

var items = [String]() 

的聲明名爲items你是不是明確指定的類型的變量,並立即將其與String值的空數組初始化。從這裏,編譯器可以推斷變量的類型是[String],所以你不需要聲明它。

+1

第一個例子將編譯 - 在Swift中,您可以推遲變量(或常量)的初始化。您只需確保在讀取之前將其初始化。 – Hamish

+1

請添加其他有效的初始者,例如'var x:[String] = []',以及使用'Array '進行綜合的變體。 – Grimxn

0

var items = [String]()被稱爲初始化語法。這意味着你正在爲將來存儲一個字符串數組分配內存。

但是,通過執行var items:[String]您不提供初始化程序。這會導致錯誤 - 從概念上考慮,您指向的是您尚未分配空間的內存區域。沒有其他變量可去!

另一方面,var items: [String] =()似乎不是任何一種標準語法。看起來像你將一個字符串數組作爲void。這不應該編譯。