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