亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Swift > 正文

Swift教程之集合類型詳解

2020-03-09 17:51:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Swift教程之集合類型詳解,Swift 提供兩種集合類型來(lái)存儲(chǔ)集合,數(shù)組和字典,本文詳細(xì)講解了數(shù)組的創(chuàng)建、讀取和修改數(shù)組、遍歷數(shù)組以及集合的操作等內(nèi)容,需要的朋友可以參考下
 

Swift 提供兩種集合類型來(lái)存儲(chǔ)集合,數(shù)組和字典。數(shù)組是一個(gè)同類型的序列化列表集合。字典是一個(gè)能夠使用類似于鍵的唯一標(biāo)識(shí)符來(lái)獲取值的非序列化集合。

在Swift中,數(shù)組和字典的鍵和值都必須明確它的類型。這意味這數(shù)組和字典不會(huì)插入一個(gè)錯(cuò)誤的類型的值,以致于出錯(cuò)。這也意味著當(dāng)你在數(shù)組和字典中取回?cái)?shù)值的時(shí)候能夠確定它的類型。
Swift 使用確定的集合類型可以保證代碼工作是不會(huì)出錯(cuò),和讓你在開(kāi)發(fā)階段就能更早的捕獲錯(cuò)誤。
note:
Swift的數(shù)組 儲(chǔ)存不同的類型會(huì)展示出不同的行為,例如變量,常量或者 函數(shù)和方法。更多的信息參見(jiàn)Mutability of Collections and Assignment 和 Copy Behavior for Collection Types.

1、數(shù)組

數(shù)組是儲(chǔ)存同類型不同值的序列化列表。同樣的值可以在數(shù)組的不同位置出現(xiàn)多次。

Swift數(shù)組是儲(chǔ)存確定的值,這個(gè)Objective-C中的NSArray和NSMutableArray類是有區(qū)別的。因?yàn)樗鼈兪莾?chǔ)存各種的對(duì)象,而且并不提供返回任何有關(guān)對(duì)象的具體信息。在Swift中,無(wú)論是確定的聲明,還是隱式的聲明,數(shù)組是非常確定它自身是儲(chǔ)存什么樣的類型,而且,它并不一定要求儲(chǔ)存的是類對(duì)象。所以Swift數(shù)組是類型安全的,因?yàn)樗恢倍即_定它自身所能包含的值。

數(shù)組的簡(jiǎn)略語(yǔ)法

定義數(shù)組的完整寫法是Array<SomeType>。其中SomeType是你想要包含的類型。你也可以使用類似于SomeType[]這樣的簡(jiǎn)略語(yǔ)法。雖然這兩種方法在功能上是相同的。但是我們更推薦后者,而且它會(huì)一直貫穿于本書。

數(shù)組實(shí)量(Array Literals)

你可以用一個(gè)數(shù)組實(shí)量(Array Literals)來(lái)初始化一個(gè)數(shù)組,它是用簡(jiǎn)略寫法來(lái)創(chuàng)建一個(gè)包含一個(gè)或多個(gè)的值的數(shù)組。一個(gè)數(shù)組實(shí)量(Array Literals)是由它包含的值,“,”分隔符 已經(jīng)包括以上內(nèi)容的中括號(hào)對(duì)“[]”組成:

 

復(fù)制代碼代碼如下:

[value 1, value 2, value 3]

下面的例子創(chuàng)建一個(gè)叫shoppinglist,儲(chǔ)存字符串(String)類型的數(shù)組。

 

 

復(fù)制代碼代碼如下:
 
var shoppingList: String[] = ["Eggs", "Milk"]
// 使用兩個(gè)初始化參數(shù)來(lái)初始化shoppingList

shoppinglist變量被定義為字符串(String)類型的數(shù)組,寫作String[]。因?yàn)檫@個(gè)數(shù)組被確定為字符串類型(String),所以它只能儲(chǔ)存字符串(String)類型的值。在這里,用兩個(gè)字符串類型的值(”Eggs” and “Milk”)和數(shù)組實(shí)量(Array Literals)的寫法來(lái)初始化shoppingList數(shù)組。

 

注意

shoppingList數(shù)組是被定義為一個(gè)變量(使用var 標(biāo)識(shí)符)而不是常量(使用let 標(biāo)識(shí)符),所以在下面的例子可以直接添加元素。

在這個(gè)例子中,數(shù)組實(shí)量(Array Literals)只包含兩個(gè)字符串類型的值,這符合了shoppingList變量的定義(只能包含字符串(String)類型的數(shù)組),所以被分配的數(shù)組實(shí)量(Array Literals)被允許用兩個(gè)字符串類型的值來(lái)初始化。

得益于Swift的類型推斷,當(dāng)你用相同類型的值來(lái)初始化時(shí),你可以不寫明類型。初始化shoppingList可以用下面這個(gè)方法來(lái)代替。

 

復(fù)制代碼代碼如下:
 
var shoppingList = ["Eggs", “Milk"]

 

因?yàn)閿?shù)組實(shí)量(Array Literals)中所有的值都是同類型的,所以Swift能夠推斷shoppingList的類型為字符串?dāng)?shù)組(String[])。

讀取和修改數(shù)組

你可以通過(guò)方法和屬性,或者下標(biāo)來(lái)讀取和修改數(shù)組。

通過(guò)只讀屬性count來(lái)讀取數(shù)組的長(zhǎng)度;

 

復(fù)制代碼代碼如下:

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

通過(guò)一個(gè)返回布爾類型的isEmpty屬性檢查數(shù)組的長(zhǎng)度是否為0

 

 

復(fù)制代碼代碼如下:
 
if shoppingList.isEmpty {     println("The shopping list is empty.")
} else {     println("The shopping list is not empty.")
}
// prints "The shopping list is not empty."

在數(shù)組末尾增加一個(gè)元素可以通過(guò)append方法

 

 

復(fù)制代碼代碼如下:

shoppingList.append("Flour")
// shoppingList 現(xiàn)在包含3個(gè)元素

甚至,還可以用(+=)操作符來(lái)把一個(gè)元素添加到數(shù)組末尾

 

 

復(fù)制代碼代碼如下:
 
shoppingList += "Baking Powder"
// shoppingList 現(xiàn)在包含4個(gè)元素

你也可以用(+=)操作符來(lái)把一個(gè)數(shù)組添加到另一個(gè)數(shù)組的末尾

 

 

復(fù)制代碼代碼如下:
 
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
// shoppingList 現(xiàn)在包含7個(gè)元素

從數(shù)組中取出一個(gè)值可以使用下標(biāo)語(yǔ)法。如果你知道一個(gè)元素的索引值,你可以數(shù)組名后面的中括號(hào)中填寫索引值來(lái)獲取這個(gè)元素

 

 

復(fù)制代碼代碼如下:
 
var firstItem = shoppingList[0]
// firstItem 等于 “Eggs"

注意,數(shù)組的第一個(gè)元素的索引值為0,不為1,Swift的數(shù)組總是索引0;

 

你可以使用下標(biāo)語(yǔ)法通過(guò)索引修改已經(jīng)存在的值。

 

復(fù)制代碼代碼如下:

shoppingList[0] = "Six eggs"
//列表中的第一個(gè)值等于"Six eggs" 而不等于 “Eggs"

你可以使用下標(biāo)語(yǔ)法一次性改變一系列的值,盡管修改的區(qū)域遠(yuǎn)遠(yuǎn)大于要修改的值。在下面的雷子中, 替換掉 “Chocolate Spread”, “Cheese”,”Butter”,”Bananas”,”Apples”:

 

 

復(fù)制代碼代碼如下:

shoppingList[4...6] = ["Bananas", "Apples"]
// shoppingList 現(xiàn)在包含6個(gè)元素

注意,你不能使用下標(biāo)語(yǔ)法在數(shù)組中添加一個(gè)元素,如果你嘗試使用下標(biāo)語(yǔ)法來(lái)獲取或者設(shè)置一個(gè)元素,你將得到一個(gè)運(yùn)行時(shí)的錯(cuò)誤。盡管如此,你可以通過(guò)count屬性驗(yàn)證索引是否正確再使用它。當(dāng)count為0時(shí)(意味著數(shù)組為空),則count-1超出了索引的有效范圍,因?yàn)閿?shù)組的索引總是從0開(kāi)始。

 

在一個(gè)特定的索引位置插入一個(gè)值,可以使用insert(atIndex:)方法

 

復(fù)制代碼代碼如下:
 
shoppingList.insert("Maple Syrup", atIndex: 0)
// shoppingList 現(xiàn)在包含7個(gè)元素
// "Maple Syrup" 在數(shù)組的第一位

這里調(diào)用insert方法指明在shoppingList的索引為0的位置中插入一個(gè)新元素 “Maple Syrup”

 

同理,你可以調(diào)用removeAtIndex方法移除特定的元素。這個(gè)方法移除特定索引位置的元素,已經(jīng)返回這個(gè)被移除的元素(盡管你并不關(guān)心這個(gè)返回值)。

 

復(fù)制代碼代碼如下:
 
let mapleSyrup = shoppingList.removeAtIndex(0)
// 索引位置為0的元素被移除 
// shoppingList 現(xiàn)在包含6個(gè)元素, 不包括 Maple Syrup
// mapleSyrup 常量等于被移除的 "Maple Syrup" 字符串

當(dāng)元素被移除的,數(shù)組空缺的位置將會(huì)被填補(bǔ),所以現(xiàn)在索引位置為0的元素再一次等于”Six eggs”:

 

 

復(fù)制代碼代碼如下:
 
firstItem = shoppingList[0]
// firstItem 現(xiàn)在等于 "Six eggs”

如果你從數(shù)組中移除最后一個(gè)元素,使用removeLast方法比removeAtIndex更方便,因?yàn)楹笳咝枰ㄟ^(guò)count屬性計(jì)算數(shù)組的長(zhǎng)度。和removeAtIndex方法一樣,removeLast會(huì)返回被移除的元素。
復(fù)制代碼代碼如下:
 
let apples = shoppingList.removeLast()
//元素的最后一個(gè)元素被移除
// shoppingList 現(xiàn)在包含5個(gè)元素,不包括 cheese
// apples 常量 現(xiàn)在等于被移除的 "Apples" string

 

遍歷數(shù)組

可以使用for-in循環(huán)來(lái)遍歷數(shù)組中的值

 

復(fù)制代碼代碼如下:
 
for item in shoppingList {     println(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

 

如果需要每一個(gè)元素的整形的索引值,使用enumerate函數(shù)代替會(huì)更方便,enumerate函數(shù)對(duì)于每一個(gè)元素都會(huì)返回一個(gè)包含元素的索引和值的元組(tuple)。你可以在遍歷部分分解元祖并儲(chǔ)存在臨時(shí)變量或者常量中。

 

復(fù)制代碼代碼如下:
 
for (index, value) in enumerate(shoppingList) {     println("Item /(index + 1): /(value)")
}
// 元素 1: Six eggs
// 元素 2: Milk
// 元素 3: Flour
// 元素 4: Baking Powder
// 元素 5: Bananas

 

如需更多for-in 循環(huán)信息, 參見(jiàn) For Loops.

創(chuàng)建和初始化數(shù)組
創(chuàng)建一個(gè)空的數(shù)組和確定的類型(不包含初始化值)使用的初始化語(yǔ)法:

 

復(fù)制代碼代碼如下:

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

注意,someInt變量被確定為Int[],因?yàn)樗褂蒙蒊nt[]的初始化方法。

 

或者,如果上下文(context)已經(jīng)提供類型信息,例如函數(shù)參數(shù)或者已經(jīng)確定類型的常量和變量,你可以從空的數(shù)組實(shí)量(Array Literals)創(chuàng)建一個(gè)空數(shù)組,寫作[](空的中括號(hào)對(duì))。

 

復(fù)制代碼代碼如下:
 
someInts.append(3)
// someInts 現(xiàn)在包含1個(gè)Int型的元素
someInts = []
// someInts 現(xiàn)在是一個(gè)空的數(shù)組, 但是類型仍然為Int[];

 

Swift數(shù)組類型也提供初始化方法來(lái)創(chuàng)建確定長(zhǎng)度和提供默認(rèn)數(shù)值的數(shù)組。你可以通過(guò)這個(gè)初始化方法增加一個(gè)新的數(shù)組,元素的數(shù)量成為count,合適的默認(rèn)值為repeatedValue

 

復(fù)制代碼代碼如下:
 
var threeDoubles = Double[](count: 3, repeatedValue: 0.0)
// threeDoubles 的類型為 Double[], 以及等于 [0.0, 0.0, 0.0]

得益于類型推斷,你并不需要指明這個(gè)數(shù)組儲(chǔ)存的類型就能使用這個(gè)初始化方法,因?yàn)樗鼜哪J(rèn)值中就能推斷出來(lái)。

 

 

復(fù)制代碼代碼如下:

var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5)
// anotherThreeDoubles 被推斷為 Double[], 以及等于 [2.5, 2.5, 2.5]

最后,你可以使用(+)操作符就能創(chuàng)建一個(gè)新的數(shù)組,把兩個(gè)存在的數(shù)組添加進(jìn)來(lái)
這個(gè)新的數(shù)組類型從你添加的兩個(gè)數(shù)組中推斷出來(lái)

 

 

復(fù)制代碼代碼如下:

var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles 被推斷為 Double[], 并等于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

 

2、字典

字典是儲(chǔ)存同一類型但是不同值的容器。每一個(gè)值都對(duì)應(yīng)這一個(gè)唯一的鍵(Key),就像是字典內(nèi)的每一個(gè)值都有一個(gè)標(biāo)識(shí)符。和數(shù)組內(nèi)的元素是有區(qū)別的,字典內(nèi)的元素是沒(méi)有特殊的序列的。當(dāng)你需要根據(jù)標(biāo)識(shí)符來(lái)查找批量的值時(shí),就可以使用字典。同樣的,真實(shí)的物品字典常常用來(lái)當(dāng)作查找特定字典的標(biāo)識(shí)符。

Swift字典時(shí)儲(chǔ)存一個(gè)類型的具體的鍵和值,和Objective-C的NSDictionary 和NSMutableDictionary由一定的區(qū)別,因?yàn)樗鼈兪鞘褂酶鞣N的對(duì)象來(lái)作為它們的鍵和值,而且并不提供任何有關(guān)對(duì)象的具體信息。在Swift中,對(duì)于一個(gè)特定的字典,它所能儲(chǔ)存的鍵和值都是確定的,無(wú)論是明確聲明的類型還是隱式推斷的類型。

Swift的字典寫法是Dictionary<KeyType,ValueType>,KeyType是你想要儲(chǔ)存的鍵,ValueType是你想要儲(chǔ)存的值。

唯一的限制就是KeyType必須是可哈希的(hashable)——就是提供一個(gè)形式讓它們自身是獨(dú)立識(shí)別的。Swift的所有基礎(chǔ)類型(例如字符串(String),整形(Int),雙精度(Double)和布爾(Bool))在默認(rèn)是可哈希的(hashable),和這些類型都常常用語(yǔ)當(dāng)作字典的鍵。枚舉成員值不需要協(xié)助值(associated values)(具體描述在 Enumerations)也是因?yàn)樗鼈兡J(rèn)也是可哈希的(hashable)。

字典實(shí)量(Dictionary Literals)

你可以直接用一個(gè)字典實(shí)量(Dictionary Literals)初始化一個(gè)字典。和前面定義一個(gè)數(shù)組實(shí)量(Array Literals)的語(yǔ)法一樣。字典實(shí)量(Dictionary Literals)就是使用簡(jiǎn)略寫法直接寫一個(gè)或者多個(gè)的鍵值對(duì)來(lái)定義一個(gè)字典。

一個(gè)鍵值對(duì)是一個(gè)鍵和值的組合。在字典實(shí)量(Dictionary Literals)里面,每一個(gè)鍵值對(duì)總是用一個(gè)冒號(hào)把鍵和值分割。鍵值對(duì)的寫法就想是一個(gè)列表,使用逗號(hào)分割,并被一對(duì)中括號(hào)[]包含著:

 

復(fù)制代碼代碼如下:

[key 1: value 1, key 2: value 2, key 3: value 3]

 

在下面的例子,將會(huì)創(chuàng)建一個(gè)字典來(lái)儲(chǔ)存國(guó)際機(jī)場(chǎng)的名字。在這個(gè)字典里面,鍵是三個(gè)字的國(guó)際航空運(yùn)送協(xié)會(huì)代碼,以及它的值是機(jī)場(chǎng)的名稱:

 

復(fù)制代碼代碼如下:
 
var airport :Dictionary<String, String> = ["TYO": "Tokyo", "DUB": “Dublin"]

 

airport字典被定義為一個(gè)類型為Dictionary<String, String>,這意味這,這個(gè)字典的鍵類型是字符串String,和它的值的類型也是String。

注意

airport字典是被定義為一個(gè)變量(使用var 標(biāo)識(shí)符)而不是常量(使用let 標(biāo)識(shí)符),所以在下面的例子可以直接添加元素。

airport字典使用一個(gè)包含兩個(gè)鍵值對(duì)的字典實(shí)量(Dictionary Literals)來(lái)初始化。第一對(duì)由一個(gè)叫“TYO”的鍵和一個(gè)叫“Tokyo”的值,第二對(duì)有一個(gè)叫“DUB”的鍵和一個(gè)叫“Dublin”的值。

這個(gè)字典實(shí)量(Dictionary Literals)包含兩個(gè)字符串(String):字符串對(duì)。這符合airport變量定義的類型(一個(gè)字典只包括字符串(String)鍵和字符串(String)值),所以在分配字典實(shí)量(Dictionary Literals)的時(shí)候被允許作為airport字典的兩個(gè)初始化元素。

和數(shù)組一樣,如果你初始化一個(gè)字典的時(shí)候使用相同的類型,你可以不指明字典的類型。
airport初始化可以用下面這個(gè)簡(jiǎn)略寫法來(lái)代替:

 

復(fù)制代碼代碼如下:

var airports = ["TYO": "Tokyo", "DUB": “Dublin”]

 

因?yàn)樗械逆I在字面上都是相同的類型,同樣,所有的值也是同樣的類型,所以Swift可以推斷為Dictionary<String, String>是airports字典的正確類型。

讀取和修改字典

你可以通過(guò)屬性,方法或者下標(biāo)來(lái)讀取和修改字典。和數(shù)組一樣,你使用只讀的count屬性來(lái)檢查字典(Dictionary)包含多少個(gè)元素。

 

復(fù)制代碼代碼如下:
 
 println("The dictionary of airports contains /(airports.count) items.")
// prints "The dictionary of airports contains 2 items."

你可以使用下標(biāo)語(yǔ)法給一個(gè)字典添加一個(gè)元素。使用合適類型作為新的鍵,并分配給它一個(gè)合適的值

 

 

復(fù)制代碼代碼如下:
 
 airports["LHR"] = "London"
//  airports dictionary 現(xiàn)在有 3 items

你也可以使用下標(biāo)語(yǔ)法去改變一個(gè)特定鍵所關(guān)聯(lián)的值。

 

 

復(fù)制代碼代碼如下:
 
airports["LHR"] = "London Heathrow"
//"LHR" 的值已經(jīng)被改變?yōu)?"London Heathrow"

同樣, 使用字典的updateValue(forKey:) 方法去設(shè)置或者更新一個(gè)特定鍵的值 . 和上面的下標(biāo)例子一樣, updateValue(forKey:) 方法如果鍵不存在則會(huì)設(shè)置它的值,如果鍵存在則會(huì)更新它的值, 和下標(biāo)不一樣是, updateValue(forKey:) 方法 如果更新時(shí),會(huì)返回原來(lái)舊的值rThis enables you to 可以使用這個(gè)來(lái)判斷是否發(fā)生了更新。

 

 

復(fù)制代碼代碼如下:

updateValue(forKey:) 方法返回一個(gè)和字典的值相同類型的可選值. 例如,如果字典的值的類型時(shí)String,則會(huì)返回String? 或者叫“可選String“,這個(gè)可選值包含一個(gè)如果值發(fā)生更新的舊值和如果值不存在的nil值。        
if let oldValue = airports.updateValue("Dublin International", forKey: "DUB") {
println("The old value for DUB was /(oldValue).")
}
// prints "The old value for DUB was Dublin."

 

你也可以使用下標(biāo)語(yǔ)法通過(guò)特定的鍵去讀取一個(gè)值。因?yàn)槿绻闹挡淮嬖诘臅r(shí)候,可以返回他的鍵,字典的下標(biāo)語(yǔ)法會(huì)返回一個(gè)字典的值的類型的可選值。如果字典中的鍵包含對(duì)應(yīng)的值,這字典下標(biāo)語(yǔ)法會(huì)返回這個(gè)鍵所對(duì)應(yīng)的值,否則返回nil

復(fù)制代碼代碼如下:
 
 if let airportName = airports["DUB"] {
 println("The name of the airport is /(airportName).")
 } else {
println("That airport is not in the airports dictionary.")
 }
// prints "The name of the airport is Dublin International."

你可以使用下標(biāo)語(yǔ)法把他的值分配為nil,來(lái)移除這個(gè)鍵值對(duì)。

 

 

復(fù)制代碼代碼如下:
 
airports["APL"] = "Apple International"
// "Apple International" 不是 APL的真實(shí)機(jī)場(chǎng),所以刪除它
airports["APL"] = nil
// APL 已經(jīng)從字典中被移除

 

同樣,從一個(gè)字典中移除一個(gè)鍵值對(duì)可以使用removeValueForKey方法,這個(gè)方法如果存在鍵所對(duì)應(yīng)的值,則移除一個(gè)鍵值對(duì),并返回被移除的值,否則返回nil。

 

復(fù)制代碼代碼如下:

if let removedValue = airports.removeValueForKey("DUB") {
println("The removed airport's name is /(removedValue).")
} else {
println("The airports dictionary does not contain a value for DUB.")
}
// prints "The removed airport's name is Dublin International."

 

遍歷字典

你可以使用一個(gè)for-in循環(huán)來(lái)遍歷字典的鍵值對(duì)。字典中的每一個(gè)元素都會(huì)返回一個(gè)元祖(tuple),你可以在循環(huán)部分分解這個(gè)元祖,并用臨時(shí)變量或者常量來(lái)儲(chǔ)存它。

 

復(fù)制代碼代碼如下:
 
for (airportCode, airportName) in airports {
println("/(airportCode): /(airportName)")
}
// TYO: Tokyo
// LHR: London Heathrow

更多有關(guān)for-in 循環(huán)的信息, 參見(jiàn) For Loops.
你也可以讀取字典的keys屬性或者values屬性來(lái)遍歷這個(gè)字典的鍵或值的集合。

 

 

復(fù)制代碼代碼如下:
 
for airportCode in airports.keys {
println("Airport code: /(airportCode)")
}
// Airport code: TYO
// Airport code: LHR
for airportName in airports.values {
println("Airport name: /(airportName)")
}
// Airport name: Tokyo
// Airport name: London Heathrow

如果你需要一個(gè)接口來(lái)創(chuàng)建一個(gè)字典的鍵或者值的數(shù)組實(shí)例,你可以使用keys或者values屬性來(lái)初始化一個(gè)數(shù)值。

 

 

復(fù)制代碼代碼如下:
 
let airportCodes = Array(airports.keys)
// airportCodes is ["TYO", "LHR"]
let airportNames = Array(airports.values)
// airportNames is ["Tokyo", "London Heathrow"]

 

注意

Swift中的字典類型是非序列化集合,如果你需要序列化取回鍵,值,或者鍵值對(duì),遍歷字典不具體敘述。

創(chuàng)建一個(gè)空字典

和字典一樣,你可以使用確定類型的語(yǔ)法創(chuàng)建一個(gè)空的字典。

 

復(fù)制代碼代碼如下:

var namesOfIntegers = Dictionary<Int, String>()
// namesOfIntegers 是一個(gè)空的 Dictionary<Int, String> 類型的字典

 

這個(gè)例子創(chuàng)建一個(gè)Int,String類型的字典來(lái)儲(chǔ)存可讀性較好的整數(shù)值。它的鍵是Int類型,以及它們的值是String類型。
如果 上下文(context )中已經(jīng)提供類型信息,可用一個(gè)字典實(shí)量(Dictionary Literal)創(chuàng)建一個(gè)空的字典,寫作[;](由一對(duì)[]包含一個(gè)冒號(hào):)

 

復(fù)制代碼代碼如下:
 
namesOfIntegers[16] = "sixteen"
// namesOfIntegers現(xiàn)在包含1 個(gè)鍵值對(duì)
namesOfIntegers = [:]
// namesOfIntegers 是一個(gè)類型為Int, String的空字典。

 

注意

在這個(gè)場(chǎng)景,Swift數(shù)組和字典類型是一個(gè)內(nèi)置的集合。更多的內(nèi)置類型和集合參見(jiàn)Generics

3、可變集合類型

數(shù)組和字典都是在一個(gè)集合中一起儲(chǔ)存不同的變量.如果你創(chuàng)建一個(gè)數(shù)組或者字典,再包含一個(gè)變量,創(chuàng)建的這個(gè)變量被稱為可變的(mutable) 這意味這,你可以在創(chuàng)建之后增加更多的元素來(lái)改變這個(gè)集合的長(zhǎng)度,或者移除已經(jīng)包含的。 相反的, 如果你把一個(gè)數(shù)組或者字典定義為常量,則這個(gè)數(shù)組或者字典不是可變的,他們的長(zhǎng)度并不能被改變。
在字典中,不可變也意味著你不能替換已經(jīng)存在的鍵的值。一個(gè)不可變字典,一旦被設(shè)置就不能改變。
數(shù)組的不可變有一點(diǎn)點(diǎn)的不同。然而,你仍然不能做任何有可能修改不可變數(shù)組的行為。但是你可以重新設(shè)置一個(gè)已經(jīng)存在的索引,這使得當(dāng)Swift的數(shù)組的長(zhǎng)度確定時(shí),能更好地優(yōu)化數(shù)組的性能。
擁有可變行為的數(shù)組也影響著數(shù)組實(shí)例的分配和修改,更多內(nèi)容參見(jiàn)Assignment and Copy Behavior for Collection Types.

注意

在所有的例子中,這是一個(gè)好的練習(xí)去創(chuàng)建不可變集合,當(dāng)數(shù)組的長(zhǎng)度不需要被改變。
我確信Swift編譯器能優(yōu)化好你所創(chuàng)建的集合。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日韩视频一区二区三区在线播放免费观看| 麻豆成人av在线| 久久婷婷国产91天堂综合精品| 欧美~级网站不卡| 欧美精品电影在线播放| 给我免费播放片在线观看| 青青草国产免费| 国产高清精品软件丝瓜软件| 嫩草影院在线观看网站成人| 久久一区二区三区电影| 日韩av高清在线看片| 久久综合成人精品亚洲另类欧美| 国产伦精品一区二区三区视频我| 在线免费观看亚洲视频| 成人高清视频在线| 亚洲欧美在线成人| 亚洲福利精品视频| 在线观看日本视频| 中文字幕天堂在线| 精品日本一线二线三线不卡| 亚洲v天堂v手机在线| 亚洲国产日韩欧美在线99| 国产v片免费观看| 亚洲精品国产setv| 日韩欧美国产综合一区| 91国内精品久久久久| 久草福利资源站| 久久99国产精品久久99果冻传媒| 一女被多男玩喷潮视频| 国产成人精品一区二区三区网站观看| 日韩人妻无码一区二区三区| 日韩一区二区不卡视频| 亚洲日本va中文字幕久久| 日韩男人的天堂| 久久九九国产| 国产乱人伦偷精品视频免下载| 亚洲网站免费| 日本电影亚洲天堂一区| 女人高潮被爽到呻吟在线观看| 国产精品免费无遮挡无码永久视频| 国产亚洲va综合人人澡精品| 性综艺节目av在线播放| 欧洲午夜精品久久久| 成人国产在线激情| av资源免费观看| 99久久99久久精品免费| 亚洲一二三专区| 小小女视频网站色琼网站| 97在线观看免费| 日本欧美电影在线观看| 欧洲成人性视频| 26uuu亚洲综合色| 欧美变态凌虐bdsm| 久久国产欧美日韩精品| 国产精品久久久久久久久久久久久久久久久| 美女一区二区三区在线观看| 国产成人啪免费观看软件| 欧美性猛交xxxxx少妇| 欧美在线中文字幕| 亚洲成人第一网站| 亚洲av无码乱码国产精品| 亚洲欧美在线人成swag| 欧美日韩免费视频| 一级片视频免费| 激情都市一区二区| 中文字幕无乱码| 91视频免费网址| 午夜一区二区三视频在线观看| 日本黄色三级大片| 久久资源av| 精品免费国产二区三区| 啪啪免费网站| 色综合天天天天做夜夜夜夜做| 黄网站app在线观看| 成人在线视频首页| 中文字幕一区二区三区精华液| 丝袜国产日韩另类美女| 91麻豆精东视频| 中文字幕第九页| 久久久精品久久| 久草免费资源站| 欧美aaaaaa午夜精品| 中文字幕制服丝袜| 在线看欧美日韩| 一区二区视频| 中文字幕一区二区人妻电影| 久久国产中文字幕| 国产三级国产精品| 午夜精品婷婷| 一本色道久久加勒比精品| 日韩精品欧美一区二区三区| 日韩欧美视频一区| 制服丝袜中文字幕第一页| 免费在线国产视频| 蜜桃av噜噜一区二区三区| 视频一区二区在线观看| 伊人色在线观看| 成年人性生活视频| 久久精品最新免费国产成人| 蜜臀av免费在线观看| 又黄又爽的网站| 国产乱淫av片免费| wwwxx在线观看| 夜夜嗨av色一区二区不卡| 神马午夜dy888| 国产精品亚洲自拍| 亚洲伦理网站| 精品无码久久久久| 黄网视频午夜青春| 欧美综合在线视频| www.亚洲一二| 欧美欧美午夜aⅴ在线观看| 先锋影音久久久| 欧美性视频精品| 日本精品一区二区三区高清| 男捅女免费视频| 大肉大捧一进一出好爽动态图| 国产日本在线| 中文字幕综合在线观看| 中文字幕123| 欧美一二三区视频| 午夜一区二区三区在线观看| 四虎www4hu永久免费| 亚洲国产另类精品专区| 黄色网在线播放| 久久综合九色综合97_久久久| www亚洲一区| 久久免费偷拍视频| 丁香啪啪综合成人亚洲| 免费久久精品| 国产亚洲一区二区三区| 91麻豆精品国产91久久久久推荐资源| 成人性生交大片免费看视频直播| 国产精品美女免费视频| 一道本视频在线观看| 成人久久网站| 台湾天天综合人成在线| 老师让我她我爽了好久视频| 欧美日韩免费一区二区| 欧美自拍偷拍网| 91在线中字| 亚洲天堂手机在线| 成人性生交大免费看| 国产精品免费久久久久影院| 精品福利樱桃av导航| 青青免费在线视频| 精品五月天堂| 久久精品视频免费| 在线免费一区三区| 国产精品免费看久久久无码| 国产一区二区网址| 国产又大又黄又粗的视频| 欧美激情中文网| 国产精品国产三级国产在线观看| 久久久久久久久久97| 国产一区二区精彩视频| 国产成人精品亚洲精品色欲| 免费羞羞视频| 欧美午夜宅男影院| 日韩天堂在线| 男男互摸gay网站| 黄污视频在线看| 国产白嫩美女无套久久| 一区二区三区四区五区在线| 欧美性xxxx极品hd欧美风情| 国产最新免费视频| 国产嫩草在线视频| 日韩一区二区三区四区| 中文字幕欧美一| 亚洲第一二三四区| 国模 一区 二区 三区| av毛片免费看| 中文字幕乱码在线| 天堂在线视频| 欧美第十八页| mm1313亚洲国产精品无码试看| 污污网站免费看| 日韩av毛片| 欧美激情图区| 欧美激情一区二区三区久久久| 91在线最新| 综合五月激情网| 神马久久久久久久久久| 最新av网址在线观看| 欧美r级电影在线观看| 狠狠色成人综合网图片区| 国内精品国产三级国产在线专| 日韩精品中文字幕在线| 国产精品天天av精麻传媒| 加勒比精品视频| 亚洲人成网77777色在线播放| 亚洲欧洲日韩综合二区| 男人添女人下部视频免费| 蜜桃精品噜噜噜成人av| 91精品国产91久久综合| 狠狠爱www人成狠狠爱综合网| 成 人 黄 色 小说网站 s色| 女人被狂躁到高潮的免费| 国模无码视频一区| 拍拍拍在线观看视频免费| 亚洲最黄网站| 国内欧美视频一区二区| 国产视频97| 日韩国产成人在线| 免费日本黄色| 少妇精品一区二区| 在线观看国产亚洲| 催眠调教后宫乱淫校园| 欧美乱xxxxxxxxx| 天天插综合网| 中文字幕被公侵犯的漂亮人妻| 国产综合视频在线观看| 99亚洲男女激情在线观看| 国产精品99re| 亚洲av无码国产精品永久一区| 免费在线视频一级不卡| 日韩黄色一级大片| 日韩欧美中文在线观看| 午夜免费福利小电影| 国产欧美高清| 高清电影在线免费观看| 亚洲黄色片在线观看| 国产av自拍一区| 亚洲一区在线观| 国产成人羞羞电影网站在线观看| 成人免费毛片糖心| 日韩在线第三页| 亚洲精品1234| 久久精品性爱视频| 欧美日韩不卡视频| 美女日批在线观看| 91中文字幕永久在线| 男人女人黄一级| 日本性爱视频在线观看| 午夜欧美在线| 97香蕉超级碰碰久久免费的优势| 九九精品在线视频| 三上悠亚一区二区三区| 亚洲线精品一区二区三区八戒| 极品少妇一区二区三区| 你懂得在线观看| 日本道在线视频| 可以看的av网址| 欧美一级日本a级v片| 成人无号精品一区二区三区| 久久综合五月天| 亚洲男人第一天堂| 久久香蕉国产线看观看av| 超碰97国产精品人人cao| 国产18无套直看片| 国产成人8x视频一区二区| gogogo高清免费观看在线视频| 无遮挡h肉3d动漫在线观看| 国产91在线观看| 一本色道a无线码一区v| 秋霞在线一区二区| 成人18精品视频| 黄色片在线免费| 影音先锋在线视频| 欧美日韩国产不卡| 久久精品国产精品亚洲精品| 北条麻妃99精品青青久久| 国产精品一区二区三区在线观| 日本老太婆做爰视频| 精品国产aⅴ一区二区三区东京热| 大美女一区二区三区| 强伦女教师2:伦理在线观看| 91激情在线观看| 日韩精品欧美精品| 国产欧美久久久久| www.av一区视频| 国产一区二区麻豆| 青青影院在线观看| 欧美日韩精品欧美日韩精品一| 九色porny丨入口在线| 国产99久久久国产精品潘金网站| 欧美一级黄色片| 久久婷婷成人综合色| 丝袜诱惑制服诱惑色一区在线观看| 国产在线视频欧美一区二区三区| 米奇精品一区二区三区在线观看| 色婷婷综合久久久中文一区二区| 91丨porny丨在线中文| 亚洲人成电影网站色www| 欧美黑人巨大xxx极品| 欧美电影影音先锋| 成人午夜在线影视| 亚洲国产91视频| 黑人巨大精品欧美| 欧美韩国日本不卡| 国产精品偷伦视频免费观看了| 午夜精品亚洲一区二区三区嫩草| 国产精品人人| 免费网站黄在线观看| 国产精品少妇自拍| 日本中文字幕一区| 欧美午夜一区二区福利视频| 亚洲av激情无码专区在线播放| 色偷偷偷亚洲综合网另类| 欧美亚洲日本一区| 久久精品影视| 免费成人在线看| 亚洲在线免费看| 中文字幕剧情在线观看| 久久亚洲欧洲| 亚洲影影院av| 色偷偷av一区二区三区乱| 国产精品va在线观看视色| 久久久精品久久久久| 国产精品久久久久久久久电影网| 国产精品情侣呻吟对白视频| 色欲欲www成人网站| 成人ww免费完整版在线观看| 国产91中文| 91久久国产最好的精华液| 深夜福利一区| 久久精品国产亚洲AV成人婷婷| xxxxx成人.com| 被下部羞羞漫画| 欧美大片免费久久精品三p| 免费看岛国视频在线观看| 亚洲美女网站| 少妇精品一区二区| 国产成人午夜精品| 制服.丝袜.亚洲.中文.综合| 国产 日韩 欧美 成人| 色偷偷av一区二区三区乱| 久久青草免费|