【Swift】クロージャをメソッドや関数の引数として渡す方法

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20150525-224340.jpg

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 us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

PAGE TOP ↑