加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 2.x Plus -- Guard

发布时间:2020-12-14 01:30:44 所属栏目:百科 来源:网络整理
导读:如果要判断的条件很多,那么在使用 if-let 这个模式的时候就会遇到一个很麻烦的问题,那就是很深的嵌套,比如这样: var lastName: String ? var firstName: String ? var gender: String ? if let ln = lastName { if let fn = firstName { if let g = gend

如果要判断的条件很多,那么在使用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!")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读