字典是一種儲存相同型別多重資料的儲存器。每個值(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...