Swift クロージャとは
受託開発セクション 松井です。
今回、Swift の クロージャ のものすごく初歩的な使い方について記載します。
私が初めて クロージャ を覚えようとした時、とても苦労したので、初めて クロージャ を使う方は参考にしてみてください。
まず、クロージャ を使う場面ですが、私が一番 「クロージャ があって、まじで便利!」と思ったのが、
・何かの処理が終わった後 呼び出し元に返したい
といった時に使う事が多かったので、勝手に、その前提で記載します。
(使う場面は、他にも沢山ありますが…)
サンプル1
サンプルを用意しました。
引数も、返り値も無い、かなりシンプルな例です。
———コード———
/// method1を実行
method1()
/// 一番初めに呼ばれるメソッド
func method1() {
/// method2を実行
method2 {
/// method2内で closure を実行すると
/// この中の処理が走る
print("クロージャが呼ばれた")
}
}
/// method1内で呼ばれる
func method2(closure: () -> ()) {
/// 通信処理とか...
/// 非同期処理とか...
/// が終わった後 closure を実行
closure()
}
———コード———
一応、呼び出される順番も記載しましたが、ややこしいですね。
サンプル2
サンプルに記載しました、
———コード———
func method2(closure: () -> ()) {
———コード———
と、
———コード———
closure()
———コード———
が、今回のメイン部分です。
closure: () -> () の部分ですが、
引数: 型 となりますが、
この場合の型を書く部分は、() -> () となります。
String や、Int とか違って、見慣れない書き方ですよね。
実行時は、メソッドのように、
closure() で、できます。
実行される順番ですが、
1、method1 が呼ばれ、
2、method1 の中で、method2 が呼ばれ、
3、method2 の処理の最後に、closure() が呼ばれ、
4、method1 の中に戻ります
となります。
まとめ
「なんでこんなややこしいことするんだ!」
「別のメソッド作れよ!」
そう思う方が沢山いると思います。
私も初めはそう思いました。
違うんですよ。めっちゃ必要なんですよ。
とくに通信処理後とか、ボタンタップ後の挙動とか、
入ってくると、めっちゃ必要なんですよ。
できれば通信処理やボタンタップなどのコード載せて、
説明できればイメージしやすく良かったのですが、
長くなるので、また次回があれば…
今は必要ないと思った方、ゆくゆくここに記載したことが必要になるはずです。
思い出した頃に、またこのページに来てみてください!