回答
通過使用var contacts: [Person]!
您實際上不初始化Person數組。
var contacts: [Person]! // contacts still nil
var contacts = [Person]() // Person array with 0 objects
如果使用()
,而不是你初始化一個空Person
陣列。在斯威夫特
操作:不聲明,其只是說該類型的變量是
算=是如在所有其他語言聲明操作者在這種情況下,隨後的(),它在此情況下宣佈一個新的人數組。
變量聲明採用以下格式:
var name: Type = initialValue
也就是說,需要聲明一個名爲的一些Type
name
變量,並將其設置爲一個initialValue
。
雖然有很多簡寫形式,所以你會看到各種選擇。你最常看到的是離開Type
部分。如果這樣做,那麼name
的類型是從initialValue
「推斷」的。
這就是var contacts = [Person]()
正在發生的事情。該類型是Person
的Array
。 ()
正在調用初始化程序(即創建數組)。
或者,您可以聲明一個帶有類型的變量,但不會給它一個初始值。但編譯器不會讓你使用它,直到你保證將它設置爲初始值。因此,例如,您可以編寫var contacts: [Person]
,然後編寫contacts = [Person]()
。
當寫var contacts: [Person]!
,具有!
,你正在聲明Optional<[Person]>
類型的變量 - 即,類型,它們可以是nil
,或包含陣列。與常規數組不同,如果不初始化數組,則數組的可選項具有默認值值。默認值是nil
- 也就是說,可選的不是包含一個數組。
但!
(而不是更常見的?
)意味着它被聲明爲一種特殊的可選項,稱爲「隱式解包可選」 - 也就是說,當您以某種方式使用它時,就好像它不是可選。這樣做的一大缺點是它可以讓你使用它,就好像它不是可選的一樣。但如果你這樣做,它是nil
然後你的程序將崩潰。因此,任何人使用contacts
之前,它需要被初始化(如與contacts = [Person]()
或指定某些現有陣列的話)
出於這個原因,最好不使用這些隱式展開自選除非是非常特殊的情況。他們有時看起來很方便,但他們通常不是最好的選擇,因爲他們很危險。
其他人提供了差異,我會給你什麼時候應該使用的情景。
var contacts: [Person]! //implicitly unwrapped optional. #1
var contacts = [Person]() //array initialization. #2
我使用#1,當我創建一個變量,它不會被它自己的類初始化。當我實現一個接收另一個控制器傳遞的信息的詳細視圖時,會出現這種情況。
對於#2,當您想要初始化一個新的空數組時使用。
- 1. 這些#import聲明有什麼區別?
- 2. 這些PHP變量有什麼區別?
- 3. 用屬性聲明實例變量或不聲明時有什麼區別?
- 4. 在聲明變量時使用「」和「'和()有什麼區別?
- 5. 這兩個聲明有什麼區別?
- 6. 這兩個聲明有什麼區別?
- 7. 這兩個聲明有什麼區別?
- 8. 這兩個聲明有什麼區別?
- 9. 這些聲明(JavaScript中)有什麼區別?
- 10. Perl變量聲明中的$,@,%之間有什麼區別?
- 11. 初始化字典和在Swift中聲明有什麼區別?
- 12. 這些在C++中有什麼區別?
- 13. 這兩個聲明在c中有什麼區別?
- 14. 這兩個函數聲明在JavaScript中有什麼區別?
- 15. 聲明變量「id」和「NSObject *」有什麼區別?
- 16. 聲明變量in/out之間有什麼區別嗎?
- 17. 在swift中聲明變量
- 18. 將變量初始化爲全局變量並在Python中聲明變量爲None時有什麼區別
- 19. 這些Java環境變量有什麼區別?
- 20. 這兩個聲明在反應JavaScript之間有什麼區別?
- 21. &c和* c聲明有什麼區別?
- 22. 在vb.net中聲明多個變量,使用一個「Dim」或多個變量,有什麼區別?
- 23. 在循環中和循環之前聲明變量有什麼區別?
- 24. drupal -----這些變量在哪裏聲明?
- 25. 這兩種函數聲明有什麼區別?
- 26. 這三個委託聲明有什麼區別?
- 27. 這兩種聲明風格之間有什麼區別/優點
- 28. 這兩個聲明有什麼區別嗎?
- 29. 這兩個對象的聲明有什麼區別?
- 30. 聲明Stream與try-with-resources聲明之間有什麼區別?
「Operator = is ... a declaring operator」這個'='沒有聲明任何東西,它給lhs分配一個值,它是聲明的'var' – 2015-03-24 23:32:44
這是真的,我需要練習我的術語 – Arbitur 2015-03-24 23:53:12