3

メソッド内の Guard let x = x の動作が外側と異なるのはなぜですか?

以下のコード例は、Playground からコピーしたものです。

var x:Int? = 3

func foo(x: Int?) {
    guard let x = x else {
        return
    }

     print(x)  // print "3\n"
}

foo(x)

guard let x = x else { 
  throw NSError(domain: "app", code: 0, userInfo: nil)
}

print(x)  // print "Optional(x)\n"
4

1 に答える 1

8

guardステートメントには、句にreturnbreakcontinueまたはが必要です。コンパイラでオプションを修正すると、このエラーが指摘されます。関数のスコープ外でガードを使用しても意味がありません。これは、条件をチェックし、無効な場合はそのスコープから抜け出すことを目的としているためです。次のエラーが表示されます。throwelsex?.description

guard本体が抜けない場合があります。

プレイグラウンド (または関数のスコープ外) で有効にする唯一の方法は、エラーをスローすることです。

ドキュメントによると:

ガード ステートメントの else 句は必須であり、noreturn 属性でマークされた関数を呼び出すか、次のいずれかのステートメントを使用して、ガード ステートメントの外側のスコープ外にプログラム制御を転送する必要があります。

  • 戻る
  • 壊す
  • 継続する
  • 投げる
于 2015-06-17T02:24:48.153 に答える