前言:
本篇僅為視頻學(xué)習(xí)筆記
if語(yǔ)句實(shí)現(xiàn)登錄
代碼示例-1
func login(_ info: [String : String]) -> Void { let username:String if let tmp = info["username"] { username = tmp } else { print("輸入用戶名") return } let password: String if let tmp = info["password"] { password = tmp } else { print("請(qǐng)輸入密碼") return } // if username .... // if password .... print("用戶名:\(username)","密碼:\(password)","登錄ing") }
==> 應(yīng)用
login(["username":"jack", "password":"123456"]) // 用戶名:jack 密碼:123456 登錄ing login(["password" : "123456"]) // 請(qǐng)輸入密碼 login(["username" : "jack"]) // 請(qǐng)輸入用戶名
根據(jù)上面代碼可以看出步悠,第二種掖鱼,如果沒(méi)有用戶名苍在,他會(huì)走到 print("輸入用戶名")钝域,返回nil.第三種式廷,如果沒(méi)有傳入密碼休偶,相當(dāng)于password這個(gè)key對(duì)應(yīng)的東西是不存在的,就會(huì)來(lái)到 print("請(qǐng)輸入密碼")暗挑,返回nil.
得出結(jié)論笋除,字典根據(jù)一個(gè)key,取出這個(gè)value,它返回的值是可選類(lèi)型的,為什么呢炸裆?垃它。
代碼示例-2
var dict = ["age":10] var age = dict["abc"] print(age)
如上面代碼,age可能亂傳一個(gè)值,如abc国拇。那么abc所對(duì)應(yīng)的值根本不存在洛史。所以字典取值的話,可能會(huì)返回nil,也可能返回不為nil,所以返回給你的是一個(gè)可選類(lèi)型酱吝。
如 if let tmp = info["username"]也殖,你要進(jìn)行一下可選值綁定,判斷一下這個(gè)值存不存在务热,如果綁定失敗就意味著返回nil,nil的話就會(huì)執(zhí)行print("輸入用戶名") return 返回nil.
小擴(kuò)展
字典根據(jù)一個(gè)key忆嗜,取出這個(gè)value,它返回的值是可選類(lèi)型的,那么數(shù)組呢崎岂?var array = [1,2,3] var num = array[0]
數(shù)組取出的直接是真是值捆毫,如果數(shù)組越界,會(huì)在運(yùn)行過(guò)程中直接報(bào)錯(cuò)冲甘。
下標(biāo)越不越界绩卤,需要我們自己去檢查,而字典key對(duì)應(yīng)的東西存不存在江醇,可以通過(guò)返回值判斷出來(lái)濒憋。
guard語(yǔ)句
?當(dāng)guard語(yǔ)句的條件為false時(shí),就會(huì)執(zhí)行大括號(hào)里面的代碼
相當(dāng)于條件不成立嫁审,才會(huì)執(zhí)行大括號(hào)里面的東西跋炕,這個(gè)跟if語(yǔ)句是反過(guò)來(lái)的。
?當(dāng)guard語(yǔ)句的條件為true時(shí)律适,就會(huì)跳過(guò)guard語(yǔ)句
?guard語(yǔ)句特別適合用來(lái) “提前退出”
?當(dāng)使用guard語(yǔ)句進(jìn)行可選項(xiàng)綁定時(shí)辐烂,綁定的常量(let)、變量(var)也能在外層作用域中使用案例-1
func login(_ info: [String : String]) -> Void { guard let username = info["username"] else { print("請(qǐng)輸入用戶名") return } guard let password = info["password"] else { print("請(qǐng)輸入密碼") return } // if username .... // if password .... print("用戶名:\(username)","密碼:\(password)","登錄ing") }
其實(shí)捂贿,let username = info["username"] 也是一個(gè)可選值綁定纠修,你可以認(rèn)為當(dāng)info["username"]當(dāng)info["username"] 返回的username,成立的話厂僧,返回true扣草。即guard條件成立的話,它就會(huì)跳過(guò)里面的大括號(hào)颜屠,來(lái)到后面辰妙。綁定的常量(let)、變量(var)也能在外層作用域中使用甫窟。即username密浑、password。對(duì)比if語(yǔ)句實(shí)現(xiàn)登錄好了很多粗井。
通過(guò)上面代碼尔破,我們可以發(fā)現(xiàn)只要guard條件不符合的時(shí)候街图,就返回。這個(gè)不就是提前退出嗎懒构?所以餐济,guard語(yǔ)句特別適合用來(lái) “提前退出”。