回答
通过使用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. 这些函数声明在Javascript中有什么区别?
- 5. 这三种声明变量的方式有什么区别?
- 6. 在声明变量时使用“”和“'和()有什么区别?
- 7. 这两个声明有什么区别?
- 8. 这两个声明有什么区别?
- 9. 这两个声明有什么区别?
- 10. 这两个声明有什么区别?
- 11. 这两个声明有什么区别?
- 12. 这两个声明有什么区别?
- 13. 这些声明(JavaScript中)有什么区别?
- 14. 这些与声明类型有什么区别?
- 15. 这些原型声明有什么区别?
- 16. 初始化字典和在Swift中声明有什么区别?
- 17. xilinx中位置声明变量有什么区别?
- 18. Perl变量声明中的$,@,%之间有什么区别?
- 19. 这些有什么区别?
- 20. 这些有什么区别?
- 21. 这些在C++中有什么区别?
- 22. 这两个函数声明在JavaScript中有什么区别?
- 23. 这两个声明在c中有什么区别?
- 24. 声明变量“id”和“NSObject *”有什么区别?
- 25. 有什么区别多个空变量声明
- 26. 声明变量in/out之间有什么区别吗?
- 27. Tensorflow:声明一个变量与tf.Variable和直接声明有什么区别?
- 28. 这个Swift函数声明中的额外变量是什么
- 29. 在swift中声明变量
- 30. 将变量初始化为全局变量并在Python中声明变量为None时有什么区别
“Operator = is ... a declaring operator”这个'='没有声明任何东西,它给lhs分配一个值,它是声明的'var' – 2015-03-24 23:32:44
这是真的,我需要练习我的术语 – Arbitur 2015-03-24 23:53:12