溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swift編程高級教程(三)集合類型-數組

發(fā)布時間:2020-06-17 01:19:08 來源:網絡 閱讀:327 作者:wcrane 欄目:移動開發(fā)

集合類型—數組

Swift語言提供了兩種集合數據類型:數組和字典,數組是一系列相同類型的變量值有序存儲;字典是一系列相同類型的變量值的無序存儲,可以通過一個唯一標識符(鍵)來引用和查找。

數組和字典總是能識別自己所能夠存儲的鍵值的類型,就是說,我們不能夠往這兩個容器內插入錯誤的類型。顯式類型聲明的集合能確保我們的代碼總是能識別其所能存儲的變量類型,并能夠讓我們在實際編碼中捕捉到出現的任何類型錯誤。

提示
Swift的數組類型的變量在常量,變量賦值或者給函數和方法傳參的時候會表現出和其他類型不一樣的行為。

數組

數組在一個有序列表中存儲相同類型的多個值,而且相同值可以在不同位置重復存儲。
Swift數組不和Objective-C的數組那樣可以存儲任意Objective-C的對象,她是存貯指定類型的值;他的類型信息是非常明確的,不管顯式類型標記或者隱式類型來推斷,他總是有確定的一個類型,而且也沒有必定是一個類對象。比如你在一個Int類型的數組里,你能且只能往里面插入Int類型的變量,其他任何值都不行。故Swift的數組是類型安全的!

數組類型簡寫語法

Swift數組類型的一般書寫的完×××式是Array < SomeType >,其中SomeType為該數組所允許存儲元素的數據類型,我們也可以用這樣的簡寫方式:SomeType[]。這兩種形式的寫法本質上是完全相同的,但是我們更喜歡使用簡寫的方式,并在后續(xù)的教程里都用這個形式,大茶也相信讀者們肯定也喜歡簡寫方式的。

數組字面常量

我們可以用一個數組字面常量來初始化一個數組變量。數組的字面常量書寫方式如下:

[value 1value 2value 3value 1]

下面的例子創(chuàng)建一個叫做shoppingList的數組來存儲 String 類型值:

var shoppingList: String[] = ["Eggs", "Milk"]// 把shoppingList初始化為兩個初始數據元素

這個shoppingList變量通過String[]形式被聲明為一個String類型值的數組,因為這個特定的數組被指定了值類型String,所以我們只能用這個數組類存儲String值,這里我們存儲了兩個字面常量String值(“Eggs”和“Milk”)。

提示
這個shoppingList是聲明為變量(var說明符)而不是聲明為常量(let說明符),因為后面的例子里將有更多的元素被加入這個數組.

這里,這個字面常量數組只包含了2個String值,他能匹配shoppingList數組的類型聲明,所以可以用他來給shoppingList變量賦值初始化。
得益于Swift的類型推斷機制,我們在用數組字面常量來初始化一個數組時不需要明確指定他的類型,用如下這個很方便的方式:

var shoppingList = ["Eggs", "Milk"]

因為這個字面常量數組里的都是相同類型值,Swift編譯器可以推斷出該數組變量正確的數據類型是String[]

數組元素的存取

我們可以通過數組的方法或者屬性或者下標運算符來對一個數組進行訪問和修改。

要得到一個數組的元素的個數,我們可以用他的只讀屬性count來獲取。

println("Tht shopping list contains \(shoppingList.count) items.")// prints "The shopping list contains 2 items."

數組有一個叫做isEmpty的屬性來表示該數組是否為空,即count屬性等于 0:

if shoppingList.isEmpty {    println("The shopping list is empty.")
} else {    println("Tht shopping list is not empty.")
}// prints "The shopping list is not empty."

我們可以調用數組的append方法在數組的末尾追加一個新的元素:

shoppingList.append("Flour")// shoppingList now contains 3 items, and someone is making pancakes

或者更簡單的達到這一目的,可以用符合運算符(+=):

shoppingList += "Baking Powder"http://shoppingList now contains 4 items

我們還有可以直接給一個數組加上另一個類型一致的數組:

shoppingList += ["Chocolate Spread", "Cheese", "Butter"]// shoppingList now contains 7 items

Swift數組的下標運算和其他語言類似,下標都是從 0 開始,我們可以直接用下標來存取數組里面的元素; 此外,Swift的數組新增了一個功能就是可以通過下標來進行區(qū)間賦值了

var firstItem = shoppingList[0]// firstItem is equal to "Eggs"shoppingList[0] = "Six eggs"http:// the first item in the list is now equal to "Six eggs" rather than "Eggs"

提示
我們不能用下標的形式來給一個數組追加一個或者多個新的元素。如果下標越界將會觸發(fā)一個運行時的錯誤,所以我們在用下標進行運算的時候時刻要記得去檢測我們所用的下標是否越界,可以通過比較我們的下標index是否大于最大的有效的下標值(count - 1

數組的插入和刪除
當我們需要在數組的某個地方插入一個新的元素的時候,可以調用數組的方法insert(atIndex:);

shoppingList.insert("Maple Syrup", atIndex: 0)// shoppingList now contains 7 items// "Maple Syrup" is now the first item in the list

當我們需要在數組的某個地方移除一個既有元素的時候,可以調用數組的方法removeAtIndex,該方法的返回值是被移除掉的元素;

let mapleSyrup = shoppingList.removeAtIndex(0)// the item that was at index 0 has just been removed// shoppingList now contains 6 items, and no Maple Syrup// the mapleSyrup constant is now equal to the removed "Maple Syrup" string

當特殊情況我們需要移除數組的最后一個元素的時候,我們應該避免使用removeAtIndex方法,而直接使用簡便方法removeLast來直接移除數組的最后一個元素,removeLast方法也是返回被移除的元素。

let apples = shoppingList.removeLast()// the last item in the array has just been removed// shoppingList now contains 5 items, and no cheese// the apples constant is now equal to the removed "Apples" string
數組元素的遍歷

在Swift語言里,我們可以用快速枚舉(for-in)的方式來遍歷整個數組的元素:

for item in shoppingList {    println(item)
}// Six eggs// Milk// Flour// Baking Powder// Bananas

如果在快速枚舉的循環(huán)體內部需要獲取每個元素所對應的序號,我們可以嵌套一個全局方法enumerate來代替數組遍歷,該方法為數組里的每一項返回一個封裝了序號與元素值的元組類型變量,我們可以在快速枚舉遍歷過程中把該元組里的值提取到合適的臨時變量或者常量中:

for (index, value) in enumerate(shoppingList) {    println("Item \(index + 1): \(value)")
}// Item 1: Six eggs// Item 2: Milk// Item 3: Flour// Item 4: Baking Powder// Item 5: Bananas
數組創(chuàng)建與初始化

我們可以用如下的語法來初始化一個確定類型的空的數組(沒有設置任何初始值):

var someInts = Int[]()println("someInts is of type Int[] with \(someInts.count) items.")// prints "someInts is of type Int[] with 0 items.

變量someInts的類型會被推斷為Int[],因為他被賦值為一個Int[]類型的初始化方法的結果。
如果程序的上下文已經提供了其類型信息,比如一個函數的參數,已經申明了類型的變量或者常量,這樣你可以用一個空數組的字面常量去給其賦值一個空的數組(這樣寫[]):

someInts.append(3)// someInts now contains 1 value of type IntsomeInts = []// someInts is now an empty array, but is still of type Int[]

Swift的數組同樣也提供了一個創(chuàng)建指定大小并指定元素默認值的初始化方法,我們只需給初始化方法的參數傳遞元素個數(count)以及對應默認類型值(repeatedValue):

var threeDoubles = Double[](count: 3, repeatedValue: 0.0)// threeDoubles is of type Double[], and equals [0.0, 0.0, 0.0]

同樣得益于Swift語言的類型推斷,我們在用這個初始化方法的時候也可以不需要指定數組里面所存儲元素類型,他會自動去判斷那個提供的默認值的類型:

var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5)// anotherThreeDoubles is inferred as Double[], and equals [2.5, 2.5, 2.5]

最后,我們數組也可以像字符串那樣,可以把兩個已有的類型一致的數組相加得到一個新的數組,新數組的類型由兩個相加的數組的類型推斷而來:

var sixDoubles = threeDoubles + anotherThreeDoubles// sixDoubles is inferred as Double[], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

好吧,關于Swift語言的數組的學習,大茶哥只能幫你到這了。戴維營教育的伙計們,發(fā)奮圖強吧。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI