web-dev-qa-db-ja.com

Swiftエラー:ガードボディは落下してはいけません

エラーが発生している次のguardステートメントがあります。どうしましたか?

guard NSFileManager.defaultManager().fileExistsAtPath(appBundlePath) else {
    print("App bundle doesn't exist")
}

エラー:「ガード」ボディが通り抜けられない可能性があります

エラー: 'ガード'ボディは通過してはなりません。スコープを終了するには 'リターン'または 'スロー'の使用を検討してください

30
james_alvarez

guardステートメントには、プログラムのフローを囲んでいるスコープから遠ざけるための何かが必要です(たとえば、ほとんどの場合、関数から戻るにはreturnです)。ガードがガードしているという条件は無効になるため、これは必須であり、プログラムフローは別の場所に移動する必要があります。

ドキュメント

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

  • 帰る
  • ブレーク
  • 継続する
  • スロー
48
james_alvarez

returnステートメントの使用を検討してください

Returnステートメントは、関数またはメソッド定義の本体で発生し、プログラムの実行を呼び出し元の関数またはメソッドに戻します。

1
Cons Bulaquena

より明確にするために、上記の回答で説明した内容の例を次に示します。

プログラムのより外側の範囲でのガードステートメント。

guard false else {
    print("Condition is not true ")
}
print("Condition met")

このコードは、このエラーステートメントを生成します

エラー:ガードステートメントの場合.playground:1:1:エラー: 'ガード'ボディが通過しない可能性がある場合は、 'リターン'または 'スロー'を使用してスコープを終了することを検討してください

単純なWordのエラーメッセージは、return、break、continue、またはthrowステートメントを使用して、guardステートメントからプログラム制御を転送する必要があることを意味します。

return transfer controlステートメント

guard false else {
        print("Condition is not true")
        return
    }
    print("Condition met")

コンソールに出力

条件が満たされました

0
Rizwan Mehboob