ios swift學習日記5-集合類型

來源:互聯網
上載者:User

ios swift學習日記5-集合類型

Swift 語言提供經典的數組和字典兩種集合類型來儲存集合資料。數組用來按順序儲存相同類型的資料。字典雖然無序儲存相同類型資料值但是需要由專屬的標識符引用和定址(就是鍵值對)。

Swift 語言裡的數組和字典中儲存的資料值類型必須明確。 這意味著我們不能把不正確的資料類型插入其中。 同時這也說明我們完全可以對擷取出的值類型非常自信。 Swift 對顯式類型集合的使用確保了我們的代碼對工作所需要的類型非常清楚,也讓我們在開發中可以早早地找到任何的類型不符錯誤。

注意:

Swift 的數組結構在被聲明成常量和變數或者被傳入函數與方法中時會相對於其他類型展現出不同的特性。 擷取更多資訊請參見集合的可變性與集合在賦值和複製中的行為章節。

數組

數組使用有序列表格儲存體相同類型的多重資料。相同的值可以多次出現在一個數組的不同位置中。

Swift 數組對儲存資料有具體要求。 不同於 Objective-C 的NSArrayNSMutableArray類,他們可以儲存任何類型的執行個體而且不提供他們返回對象的任何本質資訊。 在 Swift 中,資料值在被儲存進入某個數組之前類型必須明確,方法是通過顯式的類型標註或類型推斷,而且不是必須是class類型。例如: 如果我們建立了一個Int值類型的數組,我們不能往其中插入任何不是Int類型的資料。 Swift 中的數組是型別安全的,並且它們中包含的類型必須明確。

數組的簡單文法

寫 Swift 數組應該遵循像Array這樣的形式,其中SomeType是這個數組中唯一允許存在的資料類型。 我們也可以使用像SomeType[]這樣的簡單文法。 儘管兩種形式在功能上是一樣的,但是推薦較短的那種,而且在本文中都會使用這種形式來使用數組。

數組構造語句

我們可以使用字面語句來進行數組構造,這是一種用一個或者多個數值構造數組的簡單方法。字面語句是一系列由逗號分割並由方括弧包含的數值。 [value 1, value 2, value 3]

下面這個例子建立了一個叫做shoppingList並且儲存字串的數組:

var shoppingList: String[] = ["Eggs", "Milk"]// shoppingList 已經被構造並且擁有兩個初始項。

shoppingList變數被聲明為“字串值類型的數組“,記作String[]。 因為這個數組被規定只有String一種資料結構,所以只有String類型可以在其中被存取。 在這裡,shoppinglist數組由兩個String值("Eggs""Milk")構造,並且由字面語句定義。

注意:

Shoppinglist數組被聲明為變數(var關鍵字建立)而不是常量(let建立)是因為以後可能會有更多的資料項目被插入其中。

在這個例子中,字面語句僅僅包含兩個String值。匹配了該數組的變數聲明(只能包含String的數組),所以這個字面語句的分配過程就是允許用兩個初始項來構造shoppinglist

由於 Swift 的類型推斷機制,當我們用字面語句構造只擁有相同類型值數組的時候,我們不必把數組的類型定義清楚。shoppinglist的構造也可以這樣寫:

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

因為所有字面語句中的值都是相同的類型,Swift 可以推斷出String[]shoppinglist中變數的正確類型。

訪問和修改數組

我們可以通過數組的方法和屬性來訪問和修改數組,或者下標文法。 還可以使用數組的唯讀屬性count來擷取數組中的資料項目數量。

println("The shopping list contains \(shoppingList.count) items.")// 輸出"The shopping list contains 2 items."(這個數組有2個項)

使用布爾項isEmpty來作為檢查count屬性的值是否為 0 的捷徑。

if shoppingList.isEmpty {    println("The shopping list is empty.")} else {    println("The shopping list is not empty.")}// 列印 "The shopping list is not empty."(shoppinglist不是空的)

也可以使用append方法在數組後面添加新的資料項目:

shoppingList.append("Flour")// shoppingList 現在有3個資料項目,有人在攤煎餅

除此之外,使用加法賦值運算子(+=)也可以直接在數組後面添加資料項目:

shoppingList += "Baking Powder"// shoppingList 現在有四項了

我們也可以使用加法賦值運算子(+=)直接添加擁有相同類型資料的數組。

shoppingList += ["Chocolate Spread", "Cheese", "Butter"]// shoppingList 現在有7項了

可以直接使用下標文法來擷取數組中的資料項目,把我們需要的資料項目的索引值放在直接放在數組名稱的方括弧中:

var firstItem = shoppingList[0]// 第一項是 "Eggs"

注意第一項在數組中的索引值是0而不是1。 Swift 中的數組索引總是從零開始。

我們也可以用下標來改變某個已有索引值對應的資料值:

shoppingList[0] = "Six eggs"// 其中的第一項現在是 "Six eggs" 而不是 "Eggs"

還可以利用下標來一次改變一系列資料值,即使新資料和原有資料的數量是不一樣的。下面的例子把"Chocolate Spread""Cheese",和"Butter"替換為"Bananas""Apples"

shoppingList[4...6] = ["Bananas", "Apples"]// shoppingList 現在有六項

注意:

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

調用數組的insert(atIndex:)方法來在某個具體索引值之前添加資料項目:

shoppingList.insert("Maple Syrup", atIndex: 0)// shoppingList 現在有7項// "Maple Syrup" 現在是這個列表中的第一項

這次insert函數調用把值為"Maple Syrup"的新資料項目插入列表的最開始位置,並且使用0作為索引值。

類似的我們可以使用removeAtIndex方法來移除數組中的某一項。這個方法把數組在特定索引值中儲存的資料項目移除並且返回這個被移除的資料項目(我們不需要的時候就可以無視它):

let mapleSyrup = shoppingList.removeAtIndex(0)//索引值為0的資料項目被移除// shoppingList 現在只有6項,而且不包括Maple Syrup// mapleSyrup常量的值等於被移除資料項目的值 "Maple Syrup"

資料項目被移除後數組中的空出項會被自動填補,所以現在索引值為0的資料項目的值再次等於"Six eggs":

firstItem = shoppingList[0]// firstItem 現在等於 "Six eggs"

如果我們只想把數組中的最後一項移除,可以使用removeLast方法而不是removeAtIndex方法來避免我們需要擷取數組的count屬性。就像後者一樣,前者也會返回被移除的資料項目:

let apples = shoppingList.removeLast()// 數組的最後一項被移除了// shoppingList現在只有5項,不包括cheese//  apples 常量的值現在等於"Apples" 字串

數組的遍曆

我們可以使用for-in迴圈來遍曆所有數組中的資料項目:

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

如果我們同時需要每個資料項目的值和索引值,可以使用全域enumerate函數來進行數組遍曆。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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.