Swift中類型中加入了癞尚?可選類型寒屯,因此在每次進行參數(shù)判斷的時候都要加入是不是為nil的判斷弯囊,我們通過簡單的字符串判空來看一下guard赵颅,if let之間的區(qū)別:
func guardCase(data:String?) -> Void {
// 正常判斷
if data != nil && (data?.characters.count)! > 0 {
print("guardCase--數(shù)據(jù):\(data)")
} else {
print("guardCase--data沒有數(shù)據(jù)")
}
// let 語句
if let result = data, result.characters.count > 0 {
print("let語句:\(result)")
} else {
print("result沒有數(shù)據(jù)")
}
// guard 語句
guard let result = data, result.characters.count > 0 else {
print("guard無數(shù)據(jù)")
return
}
print("guard數(shù)據(jù)執(zhí)行")
}
通過代碼我們發(fā)現(xiàn),沒有太明顯的區(qū)別if與if let 一樣蚌铜,guard與 if let 很相似锨侯,guard和if都是基于一個表達式的布爾值去判斷一段代碼是否該被執(zhí)行,與if語句不同的是冬殃,guard只有在條件不滿足的時候才會執(zhí)行這段代碼囚痴,也可以說是guard先進行錯誤處理,然后才進行审葬,邏輯執(zhí)行.
當項目中參數(shù)if判斷增多深滚,我們可以考慮通過guard來優(yōu)化一下代碼邏輯奕谭,方便代碼的后續(xù)維護:
func guardCaseMulti(name:String?,param:String?) -> Void {
// 正常判斷
if name != nil && (name?.characters.count)! > 0 {
if param != nil && (param?.characters.count)! > 0 {
print("guardCaseMulti--數(shù)據(jù):\(param)")
} else {
}
} else {
print("guardCaseMulti--data沒有數(shù)據(jù)")
}
// let 語句
if let result = name, result.characters.count > 0,let passWord = param, passWord.characters.count > 0 {
print("let語句:\(result)---\(passWord)")
} else {
print("參數(shù)沒有數(shù)據(jù)")
}
// guard 語句
guard let result = name, result.characters.count > 0,let passWord = param, passWord.characters.count > 0 else {
print("guardCaseMulti無數(shù)據(jù)")
return
}
print("guardCaseMultiguard語句--\(result)---\(passWord)")
}