集合类型
Swift 语言提供 Arrays、Sets 和 Dictionaries 三种基本的集合类型用来存储集合数据。数组(Arrays)是有序数据的集。集合(Sets)是无序无重复数据的集。字典(Dictionaries)是无序的键值对的集。
数组(Arrays)
数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。
创建一个空数组
我们可以使用构造语法来创建一个由特定数据类型构成的空数组:
1 | var someInts = [Int]() |
注意,通过构造函数的类型,someInts 的值类型被推断为 [Int]。
或者,如果代码上下文中已经提供了类型信息,例如一个函数参数或者一个已经定义好类型的常量或者变量,我们可以使用空数组语句创建一个空数组,它的写法很简单:[](一对空方括号):
1 | someInts.append(3) |
创建一个带有默认值的数组
Swift 中的 Array 类型还提供一个可以创建特定大小并且所有数据都被默认的构造方法。我们可以把准备加入新数组的数据项数量(count)和适当类型的初始值(repeating)传入数组构造函数:
1 | var threeDoubles = Array(repeating: 0.0, count: 3) |
通过两个数组相加创建一个数组
我们可以使用加法操作符(+)来组合两种已存在的相同类型数组。新数组的数据类型会被从两个数组的数据类型中推断出来:
1 | var anotherThreeDoubles = Array(repeating: 2.5, count: 3) |
用数组字面量构造数组
我们可以使用数组字面量来进行数组构造,这是一种用一个或者多个数值构造数组的简单方法。数组字面量是一系列由逗号分割并由方括号包含的数值:
[value 1, value 2, value 3]
。
下面这个例子创建了一个叫做 shoppingList 并且存储 String 的数组:
1 | var shoppingList: [String] = ["Eggs", "Milk"] |
shoppingList 变量被声明为“字符串值类型的数组“,记作 [String]。 因为这个数组被规定只有 String 一种数据结构,所以只有 String 类型可以在其中被存取。 在这里,shoppingList 数组由两个 String 值(”Eggs” 和 “Milk”)构造,并且由数组字面量定义。
shoppingList 数组被声明为变量(var 关键字创建)而不是常量(let 创建)是因为以后可能会有更多的数据项被插入其中。
在这个例子中,字面量仅仅包含两个 String 值。匹配了该数组的变量声明(只能包含 String 的数组),所以这个字面量的分配过程可以作为用两个初始项来构造 shoppingList 的一种方式。
由于 Swift 的类型推断机制,当我们用字面量构造只拥有相同类型值数组的时候,我们不必把数组的类型定义清楚。shoppingList 的构造也可以这样写:
var shoppingList = ["Eggs", "Milk"]
因为所有数组字面量中的值都是相同的类型,Swift 可以推断出 [String] 是 shoppingList 中变量的正确类型。
集合(Sets)
集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。