AsReader製品サイト

検索

製品情報

AsReaderブログ

Swift クロージャとは

カテゴリー:
最終更新日:2021年10月15日

受託開発セクション 松井です。

今回、Swift の クロージャ のものすごく初歩的な使い方について記載します。
私が初めて クロージャ を覚えようとした時、とても苦労したので、初めて クロージャ を使う方は参考にしてみてください。

まず、クロージャ を使う場面ですが、私が一番 「クロージャ があって、まじで便利!」と思ったのが、
・何かの処理が終わった後 呼び出し元に返したい
といった時に使う事が多かったので、勝手に、その前提で記載します。
(使う場面は、他にも沢山ありますが…)

サンプル1

サンプル2

まとめ

サンプル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 の中に戻ります
となります。

まとめ

「なんでこんなややこしいことするんだ!」
「別のメソッド作れよ!」
そう思う方が沢山いると思います。
私も初めはそう思いました。

違うんですよ。めっちゃ必要なんですよ。

とくに通信処理後とか、ボタンタップ後の挙動とか、
入ってくると、めっちゃ必要なんですよ。

できれば通信処理やボタンタップなどのコード載せて、
説明できればイメージしやすく良かったのですが、
長くなるので、また次回があれば…


今は必要ないと思った方、ゆくゆくここに記載したことが必要になるはずです。
思い出した頃に、またこのページに来てみてください!

● Apple、Apple のロゴ、iPhone、iPod touchは、米国および他の国々で登録されたApple Inc.の商標です。
※iPhoneの商標は、アイホン株式会社のライセンスにもとづき使用されています。
※iOS商標は、米国Ciscoのライセンスに基づき使用されています。
● Androidは、Google LLCの商標です。 ● Windowsは米国 Microsoft Corporationの米国およびその他の国における登録商標です。
●その他、各社の会社名、システム名、製品名などは、一般に各社の登録商標または商標です。 
当社サイト内に記載されている社名、製品名、サービス名及びサイト名には、必ずしも商標表示「®」「(TM)」を付記していません。
※iOSデバイスと接続して使用する当社製品は、MFi認証を取得しています。 ※ 形状・色など予告なく変更する場合があります。