【Swift】クロージャをメソッドや関数の引数として渡す方法
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
Swiftでメソッドの引数としてクロージャを渡す方法について解説したいと思います。
クロージャをメソッドや関数に引数として渡す
引数の型として「() -> Void」などと記述すれば、クロージャを受け取ることができるようになります。
以下、サンプルです。
func function1() { println("function1") } func function2(closure: () -> Void) { closure() // 渡されたクロージャを実行する } function2(function1) function2( { println("直接渡してもOK") } )
クロージャが渡された時だけ実行する
引数のクロージャの型をOptionalにすれば、クロージャが渡された時だけ実行するようにできます。
func function2(closure: ( () -> Void )? ) { closure?() // クロージャが渡されている場合は実行する } function2( { println("ほげふが") } ) function2(nil) // クロージャを渡さない = nilを渡す
クロージャに処理結果を渡すようにする
クロージャに処理結果を渡して、その内容によってクロージャで行う処理を切り替える場合は、以下のように書きます。
func function2(closure: ( (success:Bool) -> Void )? ) { var success:Bool = false // 何か処理を行う if success { closure?(success: true) // 処理に成功したらtrueを渡す }else { closure?(success: false) // 処理に失敗したらfalseを渡す } } function2 { (success) -> Void in if success { println("処理が成功しました") }else{ println("処理が失敗しました") } }
@akio0911はこう思った。
非同期処理を別のクラスに切り出した場合などによく使う方法だと思います!
関連記事
この記事が気に入ったら「いいね!」しよう
Follow @arlife_now
Twitterで更新情報をゲット!