Swiftのクロージャーについて説明します。

そもそもクロージャーとは、関数の一つです。

関数には関数名があります。
ほかから呼び出すからです。
でもクロージャーはその場で使って、その場に値が返却されるので、ほかから呼び出す必要がありません。
だから、関数名がついていないのです。
関数名がついていない関数とざっくり考えておくといいでしょう。
でもいくらか違うところもあります。

クロージャーの中身が確定した時点で、実行されるということです。

ここではそれについて説明します。

let draemon = {
   print("I come from the future")
}

 

これはクロージャーの例です。
{}の中の値が確定されたときに、doraemonに値が代入されます。

通常の関数はこうですね。

func draemon(引数){
 処理
}

クロージャーには引数も渡せます。
inの前に引数を書きます。
inの後にクロージャーの処理を書きます。


let draemon = { (Nobita: String) in
 print("draemon with \(Nobita)" )
}

クロージャーには戻り値も設定できます
inの前に -> で戻り値の型を指定します。

let draemon = { (person:String)-> String in
  return print("draemon with \(person)" )
}

let message = draemon("shizuka")
print(message)
//draemon with sizuka

 

今度は戻値がありましたので、print(message) だけで、文字列が表示されました。

ここで注目したいのですが、messageがあたかも関数のように呼び出されています。
またmessageに引数を渡しているように見えます。

それは、draemonにクロージャーが代入されているからです。
クロージャーの中身が確定した時点で、クロージャーは実行されます。

これはWEBの世界では実に便利な機能です。
JavaScriptでもにたようなものがありますね。

では、
とりあえずここまでクロージャーを理解したら、completionHandlerの説明に戻りましょう。