为什么我需要在swift中的数组声明结尾处使用大括号?

Pri*_*Sha 3 ios swift ios8

我已经谷歌搜索了一段时间,每个教程都教我创建一个数组,你只需要做以下事情:

var persons = [String]
Run Code Online (Sandbox Code Playgroud)

但我正在从快速代码转向iOS开发学习材料,现在到处都是

var persons = [String]()
Run Code Online (Sandbox Code Playgroud)

为什么我们最后需要那些括号?

mc0*_*c01 6

看起来你混淆了两个概念:变量声明和变量赋值.

要在Swift中声明一个空数组,您必须明确说明数组可以容纳的类型.你可以用长手定义来做到这一点:

var persons: Array<String>
Run Code Online (Sandbox Code Playgroud)

或简写语法(首选):

var persons: [String]
Run Code Online (Sandbox Code Playgroud)

注意使用冒号":"而不是等于"=".

这两个都在说"我宣称存在一个名为'people'的变量(不是常量),它将是一个充满字符串的可变数组.但是现在它还是未定义的."

在Obj-C中,你可以将任何类型的Object放入NSArray中,这意味着你无法确定你将从中获得什么.以这种方式声明Array内容是Swift的Type安全功能之一.您可以确信persons只会包含String实例.

分配一个值的变量,这意味着它不只是有一个定义,但也有在内存中分配给它一个有效的对象,你必须真正初始化数组:

var persons = [String]() 
Run Code Online (Sandbox Code Playgroud)

这实际上是初始化将保存某个Type的空数组的简写方法,而不将任何参数传递给init:方法.在此之后,persons实际上有一个值,这是一个完全空的数组,只允许包含字符串.

或者,Swift的Array Type有一个第二个初始化器,可以让你传递参数:

init(count: Int, repeatedValue: T)
Run Code Online (Sandbox Code Playgroud)

您可以使用它来创建一个具有设定长度和初始值的数组:

let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")

println(\(immutableBobsArray))  \\ ["Bob", "Bob", "Bob"]
Run Code Online (Sandbox Code Playgroud)

请参阅Apple的Swift编程指南中的"集合类型",以及Swift标准库中的Array条目