您的位置:首页 > 移动开发 > Swift

Swift 2.x Plus -- Guard

2016-01-02 09:04 603 查看
如果要判断的条件很多,那么在使用
if-let
这个模式的时候就会遇到一个很麻烦的问题,那就是很深的嵌套,比如这样:

var lastName: String?
var firstName: String?
var gender: String?

if let ln = lastName {
if let fn = firstName {
if let g = gender {
}
}
}


在很久以前是这样的,但是如果再用这个例子来说明
if-let
总是嵌套很多就不合适了。因为现在你可以这样:

if let ln = lastName, let fn = firstName, let g = gender where ln = "Jordan" {
// do something
}


if-let
只是要表达:符合条件的都进来开始下一步的操作。我们下面要讲的正好是和这个语义相反的。这个就是
guard


guard
语句要表达的正好相反:不符合条件的都进来,符合条件的待会儿处理。只是不符合条件的处理块中需要有跳出语句块的操作。如:

guard let ln = lastName, let ft = firstName, let g = gender where lastName == "Lee" else {
print("not good in gurad")
return //跳出
}

print("***last name is: \(ln), first name is: \(ft), gender is: \(g)")


在最后的
print
语句中使用了guard里的条件语句中let得出来的变量名称。是的,这些在guard条件里使用的变量都可以再guard语句后面使用。

另外需要提到的是在流程控制语句中的
do-while
现在变成了
repeat-while
。这里引用官网的例子:

repeat {
// move up or down for a snake or ladder
square += board[square]
// roll the dice
if ++diceRoll == 7 { diceRoll = 1 }
// move by the rolled amount
square += diceRoll
} while square < finalSquare
print("Game over!")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: