Swift入坑系列—集合型別

SuperDanny發表於2017-12-13

  • 陣列(Arrays)
  • 字典(Dictionaries)

陣列(Arrays)

在OC裡面,NSArray和NSMutableArray這兩個類可以儲存任意型別的物件,並且不提供所返回物件的任何特別資訊。 在Swift中,資料值被存入某個陣列之前型別必須明確。方法是通過顯式的型別標註或者型別推斷,而且不是必須是class型別。

//定義了一個儲存 字串型別 的可變陣列('var'欄位修飾)
var shoppingList: [String] = ["Eggs", "Milk"]

//定義了一個儲存 字串型別 的不可變陣列('let'欄位修飾)
let peopleList: [String] = ["Danny", "Mike", "Johnnie"]
複製程式碼

Note: 當然你也可以省略型別標註,因為Swift可以根據你的內容推斷出正確的型別,如下面的程式碼。

var shoppingList = ["Eggs", "Milk"]
複製程式碼

建立並構造陣列

//建立一個整型空陣列
var array1 = [Int]()

//建立一個特定大小,並且所有資料都為預設的整型陣列
var array2 = [Int](count: 3, repeatedValue:1)

//建立一個特定大小,並且資料型別為預設的推斷為浮點型的陣列
var array3 = [](count: 3, repeatedValue:2.5)
複製程式碼

陣列的增刪改查

  1. 增(插入資料)

    Swift中往陣列裡面插入資料有多種方式: 1)append()方法

    shoppingList.append("Flour")
    複製程式碼

    2)insert(atIndex:)方法

    shoppingList.insert("Maple Syrup", atIndex: 0)
    複製程式碼

    3)+=賦值運算子

    shoppingList += ["Baking Powder"]
    複製程式碼
  2. 刪(刪除資料)

    通過removeAtIndex()方法移除指定位置的資料項。這個方法把陣列在特定索引值中儲存的資料項移除並且返回這個被移除的資料項(返回的資料項如果不用的時候可以無視):

    let mapleSyrup = shoppingList.removeAtIndex(0)
    複製程式碼

    通過removeLast()方法可以移除最後一項資料項

    let apples = shoppingList.removeLast()
    複製程式碼
  3. 改(更新資料)

    //通過指定某一項更新資料項
    shoppingList[0] = "Six eggs"

    //通過區間更新區間內資料項
    shoppingList[4...6] = ["Bananas", "Apples"]
    複製程式碼

    Note: 我們不能使用下標語法在陣列尾部新增新項。如果我們試著用這種方法對索引越界的資料進行檢索或者設定新值的操作,我們會引發一個執行期錯誤。我們可以使用索引值和陣列的count屬性進行比較來在使用某個索引之前先檢驗是否有效。除了當count等於 0 時(說明這是個空陣列),最大索引值一直是count - 1,因為陣列都是零起索引

  4. 查(訪問資料)

    //獲取第0項資料並賦值給變數firstItem
    var firstItem = shoppingList[0]

    //獲取某個區間的資料項並賦值給另外一個數值
    let tempArr = shoppingList[1...2]
    複製程式碼

陣列的遍歷

通過for-in迴圈遍歷陣列中的資料項: 【方式一】

let array = ["Danny", "Johnnie", "Mike"]
//遍歷陣列資料項
for item in array {
    print(item)
}
複製程式碼
控制檯列印:
Danny
Johnnie
Mike
複製程式碼

【方式二】

let array = ["Danny", "Johnnie", "Mike"]
//遍歷陣列資料項
for (idx, value) in array.enumerate() {
    print("idx:\(idx)  value:\(value)")
}
複製程式碼
控制檯列印:
idx:0  value:Danny
idx:1  value:Johnnie
idx:2  value:Mike
複製程式碼

字典(Dictionaries)

建立字典字面量

OC裡面,字典字面量的格式是:@{@"key" : @"value"},而Swift裡面,字典字面量以及陣列字面量均使用中括號[]包住。格式為:[key 1: value 1, key 2: value 2, key 3: value 3]

//建立一個
var airports: [String:String] = ["TYO": "Tokyo", "DUB": "Dublin"]
複製程式碼
//建立一個鍵為String,值為Int的空字典
var dic1 = Dictionary<String, Int>()
複製程式碼

字典的增刪改查

  1. 增(插入資料) 在字典中使用下標語法來新增新的資料項。可以使用一個合適型別的 key 作為下標索引,並且分配新的合適型別的值:

    airports["LHR"] = "London"
    複製程式碼
  2. 刪(刪除資料)

    通過removeValueForKey()方法在字典中移除鍵值對。這個方法在鍵值對存在的情況下會移除該鍵值對並且返回被移除的value或者在沒有值的情況下返回nil

    //通過鍵值“DUB”移除對應的值
    let removedValue = airports.removeValueForKey("DUB")
    複製程式碼
  3. 改(更新資料) 通過使用下標語法來改變特定鍵對應的值:

    //使用下標語法來改變特定鍵對應的值
    airports["LHR"] = "London Heathrow"
    複製程式碼

    也可以通過updateValue(forKey:)方法設定或者更新特定鍵對應的值。這個方法還會返回更新值之前的原值或者nil,方便我們檢查更新是否成功:

    //通過“DUB”鍵將舊值更新為“Dublin Internation”
    let oldValue = airports.updateValue("Dublin Internation", forKey: "DUB")
    複製程式碼
  4. 查(訪問資料) 使用下標語法來在字典中檢索特定鍵對應的值。由於使用一個沒有值的鍵這種情況是有可能發生的,可選型別返回這個鍵存在的相關值,否則就返回nil

    if let airportName = airports["DUB"] {
        print("DUB鍵對應的值為: \(airportName).")
    複製程式碼

} else { print("DUB鍵沒有對應的值") } ```

    控制檯列印:
    DUB鍵對應的值為: Dublin Internation.
複製程式碼

字典的遍歷

【方式一】 通過for-in迴圈遍歷某個字典中的鍵值對。每一個字典中的資料項都由(key, value)元組形式返回,並且我們可以使用臨時常量或者變數來分解這些元組:

//遍歷字典對應的鍵值對
for (key, value) in airports {
    print("\(key): \(value)")
}
複製程式碼
控制檯列印:
TYO: Tokyo
LHR: London Heathrow
複製程式碼

【方式二】 我們也可以通過訪問它的keys或者values屬性檢索一個字典所有的鍵、值:

//遍歷字典所有鍵
for key in airports.keys {
    print("該字典的鍵:\(key)")
}
//遍歷字典所有值
for value in airports.values {
    print("該字典的值:\(value)")
}
複製程式碼
控制檯列印:
該字典的鍵:LHR
該字典的鍵:TYO
該字典的值:London Heathrow
該字典的值:Tokyo
複製程式碼

Note: 當你想要將字典的鍵、值分別存起來的話,可以使用陣列的APIArray()進行儲存

//將字典的所有鍵存進keys陣列中
let keys = Array(airports.keys)

//將字典的所有值存進values陣列中
let values = Array(airports.values)
複製程式碼

總結

目前本人就先簡單的介紹陣列、字典的一些簡單的使用,後期會不斷的完善這篇文章。再一次感謝您花費時間閱讀這篇文章!


微博: @Danny_呂昌輝
部落格: SuperDanny

2015 年 07月 27日

相關文章