用护卫检查nil而不是if?

时间:2016-03-31 18:57:58

标签: swift

是否有guard相当于检查变量是否为nil?如果是这样,我如何翻译这样的语句来代替使用guard

if post["preview"]! != nil {
    //do stuff
} else {
    //handle case where the variable is nil
}

4 个答案:

答案 0 :(得分:36)

与某些已经回答的人一样,您可以使用let

guard let preview = post["preview"] else { /* Handle nil case */ return }

如果您没有使用变量,可以使用下划线来声明变量并避免警告。

guard let _ = post["preview"] else { /* Handle nil case */ return }

您也可以进行常规布尔检查,而不是使用let

guard post["preview"] != nil else { /* Handle nil case */ return }

guard

进行布尔检查的更一般情况
guard conditionYouExpectToBeTrue else { /* Handle nil case */ return }

如果您希望能够修改变量,可以使用var代替let

guard var preview = post["preview"] else { /* Handle nil case */ return }

Swift 3.0

您可以在语句之间使用逗号将var/let与布尔检查结合起来。

guard let preview = post["preview"], preview != "No Preview" else { /* Handle nil case */ return }

Swift 2.x

您可以使用var/let

where与布尔检查结合起来
guard let preview = post["preview"] where preview != "No Preview" else { /* Handle nil case */ return }

答案 1 :(得分:2)

您可以使用guard从post字典中获取值:

guard let value = post["preview"] else {
    return  // or break, or throw, or fatalError, etc.
}
// continue using `value`

答案 2 :(得分:1)

您可以使用let保护。

guard let preview = post["preview"] else {
   //handle case where the variable is nil
}

答案 3 :(得分:1)

我认为您可能需要guard-let构造,如下所示:

guard let preview = post["preview"] else { */ nil case */ }

/* handle non-nil case here... preview is non-nil */