Swift

Closureを使ったコールバック処理を学ぼう

Closureの基本的な使い方と実践的な使い方を学びます

事前準備


はじめに


closureやコールバック処理などありますが、与えられたままに使ったり、もしくは handler: nil なんて理由もなく書いてしまっている方は少なく無いと思います。
今回はclosureを使ったコールバック処理を意のままに扱えるようにしましょう。


事前知識


基本的にclosureは以下のように定義します。



func hoge(callback: () -> Void) { callback() //任意のタイミングで }

また以下のように使用します。



hoge() { print("hoge") }

このように、任意のタイミングで、メソッドを実行する側に処理を任せることができます。デリゲートと似ていますね。

問題: 1


以下の要件を満たすメソッドを定義してください。


  • 任意のStringを受け取ると、それに対して"MR."を付け足す。
  • コールバック関数内で"MR. ◯◯◯"というような出力を行う。

問題: 2


以下のメソッドを条件に合うよう改修してください。


  • closureを使いfor文が終わった後にnumを出力する。

以下の記述によりfor文が非同期で行われているため、現状はfor文処理が終わる前にnumが実行されてしまいます。



let grobalQueue = dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0) dispatch_async(grobalQueue) {}

問題コード



var num = 0 func callTestSecond() { let grobalQueue = dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0) dispatch_async(grobalQueue) { for _ in 1...10000 { num += 1 } }
print(num)
}