サードパーティのライブラリ、余分なキュー、または他の複雑さを含まないより単純なバージョンを考えてみましょう。クロージャを作成してただちに実行します。
func dothing(andPrint shouldPrint: Bool) {
let closure = {
guard shouldPrint else { return }
print("I printed!")
}
closure()
print("did it return?")
}
dothing(andPrint: false) // Prints "did it return?"
ここreturn
は閉鎖、ないdothing
を終了します。 closure
は他の関数に渡すことも、プロパティに格納して後で実行することもできます(return
はそれ以上のものを終了することはできません)。我々は独自の関数にクロージャの作成をリファクタリングした場合考えてみましょう:
func fetchClosure(andPrint shouldPrint: Bool) ->() -> Void {
return {
guard shouldPrint else { return }
print("I printed!")
}
}
func dothing(andPrint shouldPrint: Bool) {
let closure = fetchClosure(andPrint: shouldPrint)
closure()
print("did it return?")
}
dothing(andPrint: false) // Prints "did it return?"
は、(そうでない場合、これは簡単なリファクタリングではない)、これは同じ動作を持っている驚くべきことではありません。 return
が他の方法で動作した場合、どのように動作するのか(または可能でも)想像してください。
あなたの例は、同じことのはるかに複雑なバージョンです。 return
はクロージャを終了します。