在斯威夫特

在斯威夫特

问题描述:

定义阵列刚拿到它可能是一个有点傻,但即时通讯一种新的编码快速阵列的问题,就是这里的代码之间的区别:在斯威夫特

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],所以你不需要声明它。

+1

第一个例子将编译 - 在Swift中,您可以推迟变量(或常量)的初始化。您只需确保在读取之前将其初始化。 – Hamish

+1

请添加其他有效的初始者,例如'var x:[String] = []',以及使用'Array '进行综合的变体。 – Grimxn

var items = [String]()被称为初始化语法。这意味着你正在为将来存储一个字符串数组分配内存。

但是,通过执行var items:[String]您不提供初始化程序。这会导致错误 - 从概念上考虑,您指向的是您尚未分配空间的内存区域。没有其他变量可去!

另一方面,var items: [String] =()似乎不是任何一种标准语法。看起来像你将一个字符串数组作为void。这不应该编译。