Swift--数组和字典(二)
字典是一個容器,它存儲多個相同類型的值。每個值都與一個唯一的密鑰,它作為一個標(biāo)識符字典內(nèi)的值相關(guān)聯(lián)。不像在一個數(shù)組項,在字典中的項目沒有一個指定的順序。您可以使用一本字典,當(dāng)你需要查找基于其標(biāo)識符值,在大致相同的方式,一個真實世界的字典來查找定義為一個特定的詞。
Swift的字典不同于Objective-C的NSDictionary中和的NSMutableDictionary類,它可以使用任何類型的對象作為其鍵和值,不提供有關(guān)這些對象的性質(zhì)的任何信息。Swift,鑰匙和一個特定的字典可存儲的值類型總是明確,無論是通過顯式類型批注或通過類型推斷。
Swift的字典類型寫為Dictionary<KeyType,ValueType>,其中KeyType的是價值,可以用來作為字典的鍵的類型和值類型是值類型的字典中存儲這些密鑰。
唯一的限制是,關(guān)鍵字類型必須是可哈希的,也就是說,它必須提供一種方式,使自己唯一表示的。所有的斯威夫特的基本類型(如字符串,整數(shù),雙精度和布爾)是哈希默認情況下,所有這些類型都可以作為字典的鍵。無關(guān)聯(lián)的值枚舉成員的值(如枚舉描述)也可哈希的默認。
您可以初始化字典與字典的文本,這也有類似的語法文字前面見過的數(shù)組。字典文字是一種簡寫方式來寫一個或多個鍵 - 值對的字典集合。
一鍵 - 值對的鍵和值的組合。在字典中的文字,在每個鍵 - 值對的鍵和值用冒號隔開。鍵 - 值對被寫為一個列表,以逗號分隔,由一對方括號括:
[key1:value1, key2: value2, key3: value3]
下面的示例創(chuàng)建一個字典來存儲國際機場的名字。在字典中,鍵是三個字母的國際航空運輸協(xié)會代碼和值是機場名稱:
var airports: Dictionary<String, String>= ["TYO": "Tokyo","DUB": "Dublin"]
airports字典包含兩個鍵 - 值對初始化。第一對具有“TYO”的鍵和“Tokyo”的值。第二對具有“DUB”的鍵和“Dublin”的值。
這本詞典的文字包含兩個字符串:字符串對。這符合airports變量聲明的類型(只有String鍵,只有字符串值的字典)等的字典文字的賦值是允許的,以此來初始化airports字典,兩個初始項目。
?
正如數(shù)組,你不必寫字典的類型,如果你初始化它與一個字典文字,其鍵和值具有一致的類型。機場的初始化可能已被寫入一個較短的形式,而不是在:
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
因為在字面的所有鍵都是同一類型,同樣所有的值都是相同類型的對方,Swift可以推斷詞典<String, String>,字符串是正確的類型要用于airports字典。
?
訪問和修改字典
?
可以訪問和修改一個字典,通過它的方法和屬性,或使用下標(biāo)語法。正如一個數(shù)組,你可以找出項目在字典的count屬性計數(shù)來檢查個數(shù):
println("The dictionary ofairports contains \(airports.count) items.")
// prints "The dictionary of airports contains 2 items."
您可以添加一個新的項目到與標(biāo)語法字典。使用適當(dāng)類型的新鍵作為下標(biāo)索引,并指定相應(yīng)類型的新值:
airports["LHR"] = "London"?
?// theairports dictionary now contains 3 items
你也可以改變”LHR”的值
airports["LHR"] = "London Heathrow"?
// the value for "LHR" has been changed to "LondonHeathrow"
?
使用字典的updateValue(forKey:)方法來設(shè)置或更新一個特定的鍵的值。像上面的例子標(biāo),該updateValue(forKey:)方法設(shè)置一個值,如果不存在一個鍵,或更新,如果該鍵已經(jīng)存在的價值。不像一個下標(biāo),但是,updateValue(forKey:)方法執(zhí)行更新后返回舊值。這使您可以檢查是否沒有更新發(fā)生。
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)語法來從字典為特定的鍵檢索值。因為它有可能要求對沒有存在價值的關(guān)鍵,字典的下標(biāo)返回字典的值類型的可選值。如果字典包含請求的密鑰值,下標(biāo)返回一個包含該鍵的現(xiàn)有值的可選值。否則,下標(biāo)返回nil:
if let airportName = airports["DUB"]{?
?println("The name of the airport is \(airportName).")?
}else{?
?println("That airport is not in the airportsdictionary.")
}?
?//prints "The name of the airport is Dublin International."
?
您可以使用下標(biāo)語法來通過該鍵的分配為零的值從字典中刪除一個鍵 - 值對:
airports["APL"] = "Apple International"?
// "Apple International" is not the real airport for APL, sodelete it
airports["APL"] = nil
// APLhas now been removed from the dictionary
?
另外,從與removeValueForKey法詞庫中刪除一個鍵 - 值對。此方法刪除的鍵值對,如果它存在,并返回被刪除的值,或者返回nil,如果存在沒有價值:
if let removedValue = airports.removeValueForKey("DUB") {
println("The removed airport'sname is \(removedValue).")
}else{
prints "The removed airport's name is Dublin International."
}?
?//prints "The removed airport's name is Dublin International."
遍歷一個字典
我們可以使用for-in來遍歷一個字典
for (airportCode, airportName)in airports {
println("\(airportCode): \(airportName)")
}
.??? ??// TYO:Tokyo
.??? ??// LHR:London Heathrow
也可以通過訪問其鍵和值檢索的字典的鍵或值的可重復(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
?
如果需要使用字典的鍵或值與一個API,它需要一個Array實例,初始化一個新的數(shù)組中的鍵或值屬性:
.??? let airportCodes = Array(airports.keys)
.??? ??//airportCodes is ["TYO", "LHR"]
?
.??? ??let airportNames = Array(airports.values)
.??? ??//airportNames is ["Tokyo", "London Heathrow"]
?
初始化一個字典
.??? var namesOfIntegers = Dictionary<Int, String>()
.??? ?// namesOfIntegers is an emptyDictionary<Int, String>
?
?
總結(jié)
以上是生活随笔為你收集整理的Swift--数组和字典(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift--数组和字典(一)
- 下一篇: 抖音海外版遭到欧洲议会封杀 已被欧洲三大