我一直在谷歌上搜索一下,每个教程都教我创建一个数组,你只需要做以下事情:
var persons = [String]
但是我正在从快速代码转向iOS开发学习资料,现在到处都是
var persons = [String]()
为什么我们最后需要那些括号?
答案 0 :(得分:6)
似乎你混淆了两个概念:变量声明和变量赋值。
要在Swift中声明一个空数组,您必须明确说明数组可以容纳的类型。您可以使用长手定义执行此操作:
var persons: Array<String>
或简写语法(首选):
var persons: [String]
注意使用冒号“:”而不是等于“=”。
这两个都在说“我宣称存在一个名为'people'的变量(不是常数),它将是一个充满字符串的可变数组。但是现在它还是未定义的。”
在Obj-C中,你可以将任何类型的对象放入NSArray中,这意味着你无法确定你将从中获得什么。以这种方式声明Array内容是Swift的Type安全功能之一。您可以确信persons
只会包含String
个实例。
要为您的变量赋值,这意味着它不仅具有定义,而且还在内存中分配了一个有效对象,您必须实际初始化该数组:
var persons = [String]()
这实际上是一种初始化一个空数组的简便方法,该数组将保存某个Type,而不会将任何参数传递给init:方法。在此之后,persons
实际上有一个值,这是一个完全空的数组,只允许包含字符串。
或者,Swift的Array Type有一个第二个初始化器,可以让你传递参数:
init(count: Int, repeatedValue: T)
您可以使用它来创建一个具有设定长度和初始值的数组:
let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")
println(\(immutableBobsArray)) \\ ["Bob", "Bob", "Bob"]
请参阅Apple的Swift编程指南中的"Collection Types",以及the Array entry in the Swift Standard Library
答案 1 :(得分:3)
[String]
是Swift中类型的名称。具体来说,它是Array<String>
类型,它是通用Array<T>
类型的参数化版本。就像语句var number = Int
没有任何意义,除非您明确告诉编译器您正在构建特定类型的实例。
您想要的是var persons = [String]()
,或者,如果您想使用数组文字指定变量的初始值,则可以执行var persons: [String] = []
。请注意,在第二个选项中,我们被迫指定变量的类型,因为Swift的类型推断无法计算出空数组的类型([]
保持什么值?)。