定義陣列剛拿到它可能是一個有點傻,但即時通訊一種新的編碼快速陣列的問題,就是這裏的代碼之間的區別:在斯威夫特
var items:[String]
所以從這裏我認識你將變量'items'定義爲一個空數組字符串。項目是數組類型的
var items: [String] =()
這裏要定義的項目,如空數組,但它不應該寫成:
var items = [String]()
,或者這是本質上是相同的代碼
定義陣列剛拿到它可能是一個有點傻,但即時通訊一種新的編碼快速陣列的問題,就是這裏的代碼之間的區別:在斯威夫特
var items:[String]
所以從這裏我認識你將變量'items'定義爲一個空數組字符串。項目是數組類型的
var items: [String] =()
這裏要定義的項目,如空數組,但它不應該寫成:
var items = [String]()
,或者這是本質上是相同的代碼
此:
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]
,所以你不需要聲明它。
var items = [String]()
被稱爲初始化語法。這意味着你正在爲將來存儲一個字符串數組分配內存。
但是,通過執行var items:[String]
您不提供初始化程序。這會導致錯誤 - 從概念上考慮,您指向的是您尚未分配空間的內存區域。沒有其他變量可去!
另一方面,var items: [String] =()
似乎不是任何一種標準語法。看起來像你將一個字符串數組作爲void。這不應該編譯。
第一個例子將編譯 - 在Swift中,您可以推遲變量(或常量)的初始化。您只需確保在讀取之前將其初始化。 – Hamish
請添加其他有效的初始者,例如'var x:[String] = []',以及使用'Array'進行綜合的變體。 –
Grimxn