如何在函数外部和内部退出GUARD - Swift

时间:2017-12-04 17:05:35

标签: swift guard flow

在下面的代码中,我练习使用GUARD(书:OReilly Learning Swift)

Android Studio

为什么我会收到以下代码错误?

WebView

或GUARD仅在函数中使用?

2 个答案:

答案 0 :(得分:3)

如果未满足guard语句中的条件,则else分支必须退出当前范围。 return只能在函数内部使用,如错误消息所示,但return不是退出范围的唯一方法。

您也可以使用throw外部函数,如果guard语句处于循环中,您还可以使用breakcontinue

return在函数中有效:

func testGuard(){
    guard 2+2 == 4 else {
        print("The universe makes no sense")
        return // this is mandatory!
    }
    print("We can continue with our daily lives")
}

throw在函数之外也有效:

guard 2+2 == 4 else { throw NSError() }

break在循环中有效:

for i in 1..<5 {
    guard i < 5 else {
        break
    }
}

答案 1 :(得分:3)

  

或GUARD仅在函数中使用?

不一定。

来自documentation

  

如果不满足该条件,则执行else分支内的代码。 该分支必须转移控制以退出guard语句出现的代码块。它可以通过控件转移语句执行此操作,例如returnbreakcontinuethrow,或者它可以调用不返回的函数或方法,例如fatalError(_:file:line:)

例如,这可以在顶级的Playgound中使用

for i in 0...10 {
    guard i % 2 == 0 else { continue }
    print(i)
}

错误消息实际上与guard无关。它只是声明 return 不能在函数之外使用