手元の Swift のバージョン:
1.1
例えば次のような適当な関数 hogeMethod()
を定義する。第3引数は関数オブジェクト。
// 第3引数でコールバックとして実行したい関数オブジェクトを受け取る
func hogeMethod(name: String, age: Int, callback: (String) -> Void) -> Void {
// とりあえず例として第1引数(名前)と第2引数(年齢)からメッセージ文字列を作成
let message = "\(name)さん\(age)歳ですね"
// 処理が終わったら第3引数で受け取った関数を実行。今回はメッセージを渡す
callback(message)
}
この関数の呼び出しは次のような感じ。
// 第3引数でコールバックが返されたら実行したい処理を書く
hogeMethod("山田", 34, { message in
println(message) // => 山田さん34歳ですね
})
もしくは次のように書いてもいい。(最後の引数が関数である場合の略記)
hogeMethod("山田", 34) { message in
println(message) // => 山田さん34歳ですね
}
この書き方の何が嬉しいか?
上記の hogeMethod()
だと即座に結果が返されてしまうが、時間がかかる処理や非同期で実行したい処理を書きたい場合。