Array类型以一种有序列表的形式存储相同类型的数据,同时,允许存储相同值。
以下两种写法声明了一种用于存储Element类型的Array类型。
Array<Element>
[Element]
有了Array类型,你可以像自定义的类一样使用它了,例如初始化一个Array类型。
var someInts = [Int]()
var threeDoubles = [Double](count: 3, repeatedValue: 0.0)
另外,Swift提供了通过字面量初始化一个Array类型。
var shoppingList = ["Eggs", "Milk"]
shoppingList = [] // 重新设置空Array
访问Array元素可以使用下标语法,索引值切勿超出Array边界。
var firstItem = shoppingList[0]
shoppingList[0] = "Six eggs"
shoppingList[4...6] = ["Bananas", "Apples"] // 使用新Array替代shoppingList中索引值为4,5,6的元素
添加一个新元素到Array有多种方式,可以使用append(:)、insert(:atIndex:)方法,可以使用+=操作符。
shoppingList.append("Flour")
shoppingList.insert("Maple Syrup", atIndex: 0)
shoppingList += ["Chocolate Spread", "Cheese"]
使用for-in循环迭代一个Array。
for item in shoppingList {
print(item)
}
for (index, value) in shoppingList.enumerate() {
print("Item \(index + 1): \(value)")
}
Set类型以一种无序的方式存储相同类型的数据,并且每个存储的值是唯一的。也就是说,元素类型必须实现hashable协议,该协议提供了一个hashValue属性,用于比较元素值是否相等。
声明Set类型的语法如下。
Set<Element>
有几种方法声明一个Set类型变量,使用初始化器或字面量。
var letters = Set<Character>()
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
添加一个新元素到Set集合,可以使用insert(_:)方法。
从Set集合移除一个元素,可以使用remove(_:)方法,若成功,则返回移除的元素,否则返回nil。也可以使用removeAll()移除Set集合中所有的元素。
使用for-in循环迭代Set集合中每一个元素。
for genre in favoriteGenres {
print("\(genre)")
}
for genre in favoriteGenres.sort() { // 使用操作符<进行排序
print("\(genre)")
}
对于Set集合还有一些基本集合操作:
intersect(_:)
exclusiveOr(_:)
union(_:)
subtract(_:)
另外,Swift还提供了几个Set集合关系方法。
==,判断两个Set集合中的元素是否全部相等。
isSubsetOf(_:),判断当前Set集合是否是目标Set集合的子集。
isSupersetOf(_:),判断当前Set集合是否是目标Set集合的超集。
isStrictSubsetOf(_:),判断当前Set集合是否是目标Set集合的子集并且两个集合不相等。
isDisjointWith(_:),判断当前Set集合是否与目标Set集合互斥。
Dictionary类型以一种无序的方式存储键值对,每个键是唯一的。
有两种方式声明一个Key类型作为键,Value类型作为值的Dictionary类型。
Dictionary<Key, Value>
[Key: Value]
有了Dictionary类型,你可以像自定义的类一样使用它了,例如初始化一个Dictionary类型。
var namesOfIntergers = Dictionary<Int, String>()
var valueOfIntergers = [Int: String]()
另外,Swift提供了通过字面量初始化一个Dictionary类型。
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
airports = [:] // 使用空Dictionary类型赋值
可以通过Dictionary类型的方法或下标形式来访问或修改Dictionary类型中的元素。
使用下标语法访问一个元素,返回值类型为Dictionary值类型的可选类型。
if let airportName = airports["DUB"] {
print("The name of the airport is \(airportName)")
} else {
print("That airport is not in the airports dictionary.")
}
使用下标语法添加一个元素,若键值已经存在则修改对应的元素的值,否则添加新元素到Dictionary集合。
airports["LHR"] = "London" // 添加
airports["LHR"] = "London Heathrow" // 修改
使用updateValue(_:forKey:)方法更新一个元素,若修改的元素已经存在则返回被修改的值,否则返回nil。该方法返回值类型为Dictionary值类型的可选类型。
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
print("The old value for DUB was \(oldValue).")
}
使用下标语法或removeValueForKey(_:)方法从Dictionary集合中移除一个元素。
airports["APL"] = nil
if let removedValue = airports.removeValueForKey("DUB") {
print("The removed airport's name is \(removedValue).")
} else {
print("The airports dictionary doest not contain a value for DUB.")
}
使用for-in语法迭代Dictionary集合中的每个键值对,每个键值对以元祖类型(key, value)形式表现。
for (airportCode, airportName) in airports {
print("\(airportCode): \(airportName)")
}