为了对一列变量,常量或者其他类型进行组织,你可以使用数组。数组中的每一项都必须具有相同的数据类型,数据类型可以使整型、浮点型、字符串以及对象类型。下列代码创建了一个空数组,后面你可以向这个空数组中添加字符串
vara1:Array<String> = Array<String>()
var a2:[String] = [String]()
上述代码的第一行展示了一种比较啰嗦的定义数组的方式。你必须使用Array关键字并使用小于<和大于>符号将数据能够存储的数据类型括起来。在上例中,a1只能保存字符串类型的值。
你必须使用复制运算符(=)来初始化数组,接下来是关键字Array后面紧跟着使用<>括起来的数据类型,然后加上一个小括号,这是默认的初始化器,这个初始化器创建了一个数组类型。
有一个定义数组的更加简单的方式,详细见上述代码中的第二行。通过将一个数据类型放在[]中的方法定义并初始化一个数组
如果你在初始化数组的同时填充值,那么数组的声明会更加简单,这得益于Swift的类型推断,可以让你忽略初始化和类型声明。如下所示:
var a3 = ["A","B", "C"]
在上例中,你只是将["A", "B","C"]赋值五日变量a3,但这已经包含足够的信息让编译器将a3推断为字符串数组类型。["A", "B", "C"]被称作数组实量,是写出数组常量的最快的方式
数组的可变性
因为在上面定义的数组都是使用var关键字,所以他们都是可变的。可变意味着你可以添加、移除以及更改列表中的项。你可以使用let关键字创建一个不可变的数组。如下所示:
let ma1 =["D", "E", "F"]
//Causes build error
ma1+="G"
在上例中,使用let关键字创建了一个名为ma1的不可变的数组。不可变数组不能被改变。如果你试图向数据中添加新项,你会得到一个编译时错误。
向数组中添加项目
数组使用列表的方式存储项,这些项使用从0开始的整数进行索引。使用+=运算符或者append函数可以向数组的末尾添加新项,如下:
a1+="Apples" //新的语法是 a1 += [“Apples”]
a1.append("Oranges")
a1将会包含两个字符串"Apples" 和 "Oranges"。如果你想添加新的项目而不想将其添加到数组的末尾,你可以使用insert函数,如下:
a1.insert("Pineapples",atIndex: 1)
如果你添加了上面的代码,a1的值将会是[Apples, Pineapples, Oranges],你可以将代码敲入Playground中验证一下。
从数组中移除项目
你可以使用removeAtIndex()函数从数组中移除数据。你需要提供你想要移除的项目在数组中的索引作为参数。下列代码给出了这个函数的一个例子,以及其他可以从数组中移除项目的函数。
a1.removeAtIndex(0)
a1.removeLast()
a1.removeAll(keepCapacity: false)
在上述代码中,首先使用removeAtIndex()函数移除了数据中的第一个元素。然后使用函数removeLast移除可最后一个元素,最后,使用removeAll(keepCapacity:).移除了所有的数据。函数removeAll(keepCapacity:)中的参数表明你是否保持数组的存储能力。如果你知道你会岸上替换这些项目,这将会节省处理器资源如果你保持数组的初始状态
改变数组中的元素
要改变数组中的某一项,可以使用如下的代码:
var a4 = [1, 2,33, 4, 5]
a4[2] = 3
在上面的代码中,你通过将一个数组实量[1, 2, 33, 4, 5]赋给一个变量来创建一个有5个数据的数组。然后,你改变第三个位置的项目的值33为3
在上述代码中,你还可以来了解怎样使用整型索引来访问数组中的项目。你将索引值用中括号括起来并在前面加上数组名。
遍历数组
如果你有一列项目存储到数组中,你会遇到遍历整个数组或者访问某一个项目的值并在这个值上做一些操作,你可以使用for-in循环
for i in a4{
println("i = \(i)")
}
上例中使用for-in循环遍历a4数组中的每一个元素,每一个元素的值都是可以访问的并会在控制台上打印出来。循环会在第22章进行详细介绍,下面是循环语句最终打印的结果:
i = 1
i = 2
i = 3
i = 4
i = 5