在守卫声明中迅速使用休息

时间:2016-06-10 16:34:30

标签: swift if-statement optional guard

我正在尝试在break语句中使用guard,但编译器告诉我

  

'break'仅允许在循环内,if,do或switch

是否可以在此片段中编写类似内容(这只是一个MCV)?

   func test(string: String?, x: Int) {
        print("Function Scope BEGIN")
        if x > 4 {
            guard let pr = string else { break }
            print(pr)
        }
        else {
            print("Not")
        }
        print("Function Scope END")
    }

2 个答案:

答案 0 :(得分:9)

是的,这是可能的。您可以在循环内使用未标记的break语句,但不能在if块内使用。您可以使用带标签的break语句。例如,此版本的代码将起作用:

func test(string: String?, x: Int) {
    print("Function Scope BEGIN")
    someLabel: if x > 4 {
        guard let pr = string else { break someLabel }
        print(pr)
    }
    else {
        print("Not")
    }
    print("Function Scope END")
}

答案 1 :(得分:2)

如果guard-let位于循环内,则break语句只能在guard let内使用。

在您的使用案例中,我说您应该使用if-let,因为return的替代选项不是您想要的。

    func test(string: String?, x: Int) {

        print("Function Scope BEGIN")
        if x > 4 {

            if let pr = string { print(pr) }

        }
        else {

            print("Not")
        }
        print("Function Scope END")
    }