Swift4 0 Dictionary使用詳解

2022-08-21 11:42:09 字數 4718 閱讀 5442

字典是一種儲存相同型別多重資料的儲存器。每個值(value)都關聯獨特的鍵(key),鍵作為字典中的這個值資料的識別符號。和陣列中的資料項不同,字典中的資料項並沒有具體順序。我們在需要通過識別符號(鍵)訪問資料的時候使用字典。

字典必須滿足的條件:

(1)字典鍵值對的鍵和值的型別必須明確,可以直接指定,也可以類似陣列直接賦值由編譯器自動識別(在自動識別時字典裡的型別必須是同一種型別)

(2)字典必須要初始化

(3)鍵的型別基本資料型別和遵循雜湊(hashable)協議的類

//

//初始化乙個空字典

var dict1:dictionary= [:]//

其中鍵是int型 值是string型

var dict2:[string:string] = [:]//

其中鍵、值都是string型

var dict3 =[string:string]()

var dict4 = dictionary()

//

//增、刪、改、查

//其中as後的[string : any]是字典的 鍵、值型別

var dict = ["

name

":"sunfusheng

", "

age":20, "

blog

":"sunfusheng.com

"] as

[string : any]

//1、增、改

//有則更新鍵值對的值,無則增加乙個鍵值對

dict["

height

"] = 60

print(

"dict = \(dict) one = \(string(describing: dict[

"age"

]))"

)

/**列印結果為:dict = ["name": "sunfusheng", "age": 20, "height": 60, "blog": "sunfusheng.com"] one = optional(20)

*///

updatevalue: 有則更新鍵值對的值,無則增加乙個鍵值對,如果字典裡含有updatevalue的key那就返回老大值,否則返回nil(nil在swift中,nil不是指標,它是乙個確定的值,用於表示值缺失。任何型別的可選狀態都可以設定為nil,不只是物件型別)

dict.updatevalue("

sina

", forkey: "

weibo")

let backvalue = dict.updatevalue(28, forkey: "

age"

)

//2、 查/**

這裡的:!強制對optional值進行拆包

在swift中,!和 ?都是拆包但他兩的使用場景不一樣

!的使用場景:

1)強制對optional值進行拆包

2)宣告隱式拆包變數,一般用於類中的屬性

?的使用場景:

1)宣告optional值變數

2)在對optional值操作中,用來判斷是否能響應後面的操作

*/let age:any = dict["

age"] as!int

print(

"dict = \(dict) \n backvalue = \(string(describing: backvalue)) \n age = \(age)")

/**列印結果為:

dict = ["name": "sunfusheng", "age": 28, "height": 60, "weibo": "sina", "blog": "sunfusheng.com"]

backvalue = optional(20)

age = 28

*///

3、刪

//(1)可以使用下標語法來通過給某個鍵的對應值 賦值 為 「nil」 來從字典裡 移除乙個鍵值對

dict["

height

"] =nil

print(

"nowdic = \(dict)")

/**列印結果為:

nowdic = ["name": "sunfusheng", "age": 28, "weibo": "sina", "blog": "sunfusheng.com"]

字典裡的 "height": 60 已經被移除

*//*

* (2)通過removevalue(forkey:)這個方法也可以移除鍵值對,這個方法在鍵值對存在的情況下會移除該鍵值對並返回被移除的值(在沒有值的情況下返回nil)

*/let removevalure = dict.removevalue(forkey: "

name")

print(

"dict = \(dict) \n removevalure = \(string(describing: removevalure))")

/**列印結果為:

dict = ["age": 28, "weibo": "sina", "blog": "sunfusheng.com"]

removevalure = optional("sunfusheng")

有結果可以得:字典裡的 "name": "sunfusheng" 已經被移除

*///

(3)removeall() 清空字典的所有鍵值對

dict.removeall()

let dict1:dictionary= [:]//

其中鍵是int型 值是string型

let dict = ["

name

":"sunfusheng

", "

age":20, "

blog

":"sunfusheng.com

"] as

[string : any]

//1、通過isempty判斷

ifdict1.isempty

else

ifdict.isempty

else

/**列印結果:

dict1 字典為空

dict 不為空 = ["name": "sunfusheng", "age": 20, "blog": "sunfusheng.com"]

*///

2、通過字典的key的陣列來判斷

let keys1 =dict1.keys.count

let keys =dict.keys.count

if keys1 == 0

else

if keys == 0

else

/**列印結果:

dict1 字典為空

dict 不為空 = ["name": "sunfusheng", "age": 20, "blog": "sunfusheng.com"]

兩次結果一樣

*/

let dict = ["

name

":"sunfusheng

", "

age":20, "

blog

":"sunfusheng.com

"] as

[string : any]

//字典的遍歷,使用for - in 迴圈來遍歷字典中的鍵值對,每個字典中的資料項都以(key,value)元組的形式返回,可以使用臨時常量或者變數來分解這些元組

for dictvalure in

dict

/**輸出結果:

字典遍歷的結果:(key: "name", value: "sunfusheng")

字典遍歷的結果:(key: "age", value: 20)

字典遍歷的結果:(key: "blog", value: "sunfusheng.com")

*///

可以單獨遍歷出字典裡的所有keys 或 values值

//(1)獲取字典中所有的鍵

for dictkey in

dict.keys

/**輸出結果:

dictkey = name

dictkey = age

dictkey = blog

*///

(2)獲取字典中的所有值

for dictvalue in

dict.values

/**輸出結果:

dictvalue = sunfusheng

dictvalue = 20

dictvalue = sunfusheng.com

*///

當只是需要使用某個字典的鍵集合或者值集合來作為某個接收array 可以直接使用keys或者values屬性構造乙個新陣列

let dictkeyarray =[string](dict.keys)

let dictvaluesarray =[any](dict.values)

print(

"dictkeyarray = \(dictkeyarray) \n dictvaluesarray = \(dictvaluesarray)")

/**輸出結果:

dictkeyarray = ["name", "age", "blog"]

dictvaluesarray = ["sunfusheng", 20, "sunfusheng.com"]

*/

Swift4 0 基礎部分

翻譯能力有限,如有不對的地方,還請見諒!希望對swift的學習者有所幫助 swift是一門新的程式語言,用於ios,macos,watchos以及tvos系統平台上應用程式的開發。儘管如此,如果有c和objective c開發經驗的話,那麼對於swift的許多部分,你將並不陌生。c和objectiv...

Swift 4 0 巨集定義

swift中並沒有加入巨集系統,c語言使用 define定義的基本常量在匯入swift時被swift編譯自動轉為swfit語言的全域性變數。但複雜的巨集定義不能被swift轉換。swift中類似巨集定義,可以單獨建立乙個類,如const.swift,在此類中宣告一些常量。例如 螢幕的寬 let sc...

Swift 4 0 陣列 Array 學習

定義陣列常量 常量只有讀操作 let array1 int 11,55,5 let array2 11,55,5 定義陣列變數var array int 這是我最喜歡的 var array0 int 10,20,30 初始化並賦值 var array1 int array var array2 ar...