2016-09-18 8 views
1

guardが条件に合格しなかった場合、閉鎖を終了します。しかし、何が私を混乱させて、ガードが出てくるブロックであると考えられるのでしょうか?例えばどのブロックガードが終了するかを知るには?

は、私は次のようしている場合:

func doThing() { 
    while ... { 
    for ... { 
     if ... { 
     guard ... else { return } 
     } 
    } 
    } 
} 

guard出るだけifforwhile、または全体funcしていますか?

guardの内容を定義するときにblockclosureという用語を同じ意味で使用していますが、それぞれの用語が異なる意味を持つため、実際のルールは何ですか?

答えて

1

returnサイクルの深さにかかわらず、結果値(デフォルトではVoid)で最も近いクロージャ(あなたの場合の関数)を終了するステートメント、またはifの条件。おそらく、returnbreakが混在しています。

しかし、あなたはまた、guard文のelse句でbreakcontinueまたはthrowステートメントを使用することができます。例えば、breakステートメントを使用する場合は、最も近いサイクルの実行またはswitchステートメントを終了するか、またはmark cycle/if/switch by labelであり、そのラベルの後にbreakを使用して終了ステートメントを終了します。

関連する問題