數組作為程序中最常使用的對象之一,在任何程序語言中數組的重要性不言而喻,在Swift中也不例外。
數組是相同數據類型的元素的集合,數組中的各元素是有先后順序的,它們在內存中按照這個先后順序連續存放在一起, 且數組支持添加,刪除,修改和遍歷數組內的元素。
程序樣例 - 可在Playground內編譯運行
//創建數組
//西游團隊的主要成員唐三藏,孫悟空,豬悟能和沙悟凈。
var members: [String] = ["唐三藏", "孫悟空", "豬悟能","沙悟凈"]
//訪問數組內元素
print( "大師兄 \(members[1])" )
print( "師傅是 \(members.first)" )
print( "三師弟 \(members.last)" )
//修改數組
//孫悟空在三打白骨精事件后離開團隊。
members.remove(at: 1)
//孫悟空在寶象國事件后又加入團隊。
members.insert("孫悟空", at: 1)
//遍歷數組,依次輸出成員。
for (index, member) in members.enumerated() {
print( "第\(index)位團隊成員 == \(member)" )
}
//數組長度
print("團隊成員共 == \(members.count) 位")
//九九八十一難后,團隊成員修成正果,團隊解散。
members.removeAll()
//數組是否為空
print("團隊解散 = \(members.isEmpty)")
程序分析
1. 創建數組
上述樣例中體現創建數組的代碼片段如下,其創建了一個包含4個字符串的數組。
var members: [String] = ["唐三藏", "孫悟空", "豬悟能","沙悟凈"]
其實Swift中針對不同的場景提供了多種初始化的方式, 如你可以通過如下初始化語法創建一個指定數據類型的空數組:
var someStrings = [String]()
或
var someStrings: [String] = []
其中的String可根據需要替換成任意數據類型,如Int。
var someInts = [Int]()
或
var someInts: [Int] = []
Swift還提供另一種初始化方式,在新生成數組中包含指定數量且重復的值。
let fiveMonkeys = Array(repeating: "孫悟空", count: 3)
//輸出 ["孫悟空", "孫悟空", "孫悟空"]"
2. 訪問數組
和其他編程語言一樣,Swift 也是通過下標檢索數組內的元素。
var someVar = someArray[索引]
上述中的索引從0開始計數,通過索引 0 可以獲取數組內的第 1 個元素,而第 2 個元素可以通過索引 1 獲取,諸如此類,直到數組結束。
注意,索引的使用要注意是否超出當前數組邊界,否則會導致程序崩潰。
Swift 提供了更優雅的方式來獲取第一個元素(.first)和最后一個元素(.last),且其返回的是可選型值。
開頭的程序樣例已經展示了如何訪問數組:
print( "大師兄 \(members[1])" ) // "孫悟空"
print( "師傅是 \(members.first)" ) //"唐三藏"
print( "三師弟 \(members.last)" ) // "沙悟凈"
3. 修改數組
在使用數組的時候,會經常遇到需要修改數組內元素的場景。
需要向數組末端添加新的元素的時候,可以使用 append()方法或 加法賦值運算符( += )。
//初始化空數組。
var members: [String] = []
//使用append() 添加新元素。
members.append("唐三藏")
var subMembers: [String] = ["孫悟空", "豬悟能","沙悟凈"]
//使用加法賦值運算符添加新元素。
members += subMembers
//也可以寫為 members = members + subMembers
當向數組中指定位置插入新的元素時,可以使用方法 insert(), 而新的元素會插入在指定索引的前面。
var members: [String] = ["唐三藏", "豬悟能","沙悟凈"]
//數組內容為 "唐三藏", "豬悟能","沙悟凈"
members.insert("孫悟空", at: 1)
//插入新的元素后,數組內容為"唐三藏", "孫悟空", "豬悟能","沙悟凈"
當然如果需要修改數組中指定索引的值,也是很容易操作的。
var members = ["唐三藏","孫悟空", "豬悟能","沙悟凈"]
//六耳獼猴用偷天換日之法替換了孫悟空
members[1] = "六耳獼猴"
//這時團隊成員是 ["唐三藏","六耳獼猴", "豬悟能","沙悟凈"]
當需要移除目標數組內的元素時,可以使用方法removeAll()移除所有元素,也可以使用方法.remove(at: _) 移除指定索引的元素。
var members: [String] = ["唐三藏", "孫悟空", "豬悟能","沙悟凈"]
//當前數組內容為"唐三藏", "孫悟空", "豬悟能","沙悟凈"
//孫悟空在三打白骨精事件后離開團隊。
members.remove(at: 1)
//當前數組內容為"唐三藏", "豬悟能","沙悟凈"
members. removeAll()
//當前數組內容為空
4. 遍歷數組
我們可以使用for-in來遍歷數組。
當需要獲取每個元素的索引, 這時用用導函數enumerate(), 其實這種在開頭中的程序樣例中已經展示了此用法。
for (index, member) in members.enumerated() {
print( "\(index) == \(member)" )
}
//運行上述程序會依次輸出每個元素和索引。
//第1位團隊成員 == 唐三藏
//第2位團隊成員 == 孫悟空
//第3位團隊成員 == 豬悟能
//第4位團隊成員 == 沙悟凈
5. 更多
只讀屬性count用來返回數組內所有元素的個數,主程序中也有count的用例。
print(members.count)
//由于當前數組內的元素是 ["唐三藏", "孫悟空", "豬悟能","沙悟凈"], count會返回 4。
只讀屬性isEmpty用來表示當前數組是否為空。
print("團隊解散 = \(members.isEmpty)")
結合上面的count屬性,也可換一種寫法, 不過顯然使用isEmpty更優雅。
print("團隊解散 = \(members.count == 0)")