【Swift入門】クロージャの使い方をわかりやすく解説!

Swiftでは関数によく似た処理としてクロージャ(Closures)があります。

この記事では、

・クロージャとは
・クロージャの基本的な使い方
・クロージャの型の宣言と引数の指定方法

というクラスの基本的な解説から、

・クロージャを引数に関数を実行する
・クロージャの最適な書き方とは(sorted)

などの応用的な使い方に関しても解説していきます。

今回はそんなクロージャ(Closures)の使い方についてわかりやすく解説します!

※この記事ではSwift3.1を使用しています。

クロージャとは

Swiftにはクロージャ(Closures)という関数とよく似た仕組みの機能があります。

クロージャについてWikiPediaで調べると、

    クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。

とあります。

まだいまいちピンとこない方もいるのではないでしょうか?

クロージャの機能をわかりやすく言うと、波カッコ{}ブロックで囲んだ中にある処理を実行する自己完結型の機能となります。

簡単に言えば関数のように名前を付ける必要がなく、指定した変数や引数に関数の処理を直接代入するような使い方をします。

クロージャの書き方:

クロージャの使い方

ここではクロージャの使い方について見ていきましょう。

基本的な使い方

引数と戻り値の無いクロージャは以下のように作成します。

サンプルプログラム1

クロージャはコードを簡略化できるルールがあるため、引数や返り値が無いVoid型なら{ () -> () in ~}のように記述することが可能です。

また以下のようにVoidを記述したり、引数がないことが分かりきっている場合は (引数) -> 戻り値の型 in を省略することもできます。

サンプルプログラム2

型の宣言と引数の指定

クロージャは関数と似た機能ですが、あらかじめ型を指定することもできます。

以下では引数にInt型、戻り値をVoidとしたクロージャを宣言しています。

クロージャの型宣言は必ずしも指定する必要はありません。

また、クロージャは宣言した型を元に引数を指定して、処理を実行できます。

以下に引数を指定して、クロージャ内で処理を実行するサンプルを紹介します。

引数あり、戻り値なし:

実行結果:

このように関数と同じように引数を指定して処理が実行できることがわかりますね!

以下ではクロージャに引数で渡した変数で演算した結果を戻り値で返すサンプルです。

引数、戻り値あり:

実行結果:

クロージャの応用的な使い方

クロージャを引数に関数を実行する

クロージャは、クロージャを引数として関数を実行することもできます。

以下ではInt型の変数2つとクロージャを引数にして関数を実行し、関数内でクロージャを実行するサンプルを紹介します。

サンプルプログラム

実行結果:

クロージャの最適な書き方とは

クロージャはSwift独特な機能なため、他の言語を経験している方にとっては関数のほうがわかりやすいと思うかもしれません。

見た感じどのような処理をしているのかわかりずらいクロージャよりは、関数を使ったほうが分かりやすい点もあります。

しかし、簡潔にまとまった処理を記述するには、省略形も使えるクロージャのほうがコード記述量が少なく済み、便利が場合もあります。

以下のサンプルでは、ソート処理「sorted(by:)」を元にクロージャで記述する例を紹介します。

サンプルプログラム

実行結果:

sorted(by: )は配列の内容と同じ型の引数を2つクロージャで受け取り、Bool値を返して値がソートされると最初の値が第2引数の値の前後に現れるかどうかを返します。

取得したfruits_sortの配列を見てみると、アルファベットの大きい順に並べ替えられているのがわかりますね!

まとめ

ここではクロージャについて、

・クロージャとは
・クロージャの基本的な使い方
・クロージャの型の宣言と引数の指定方法
・クロージャを引数に関数を実行する
・クロージャの最適な書き方とは(sorted)

などについて解説しました。

クロージャは簡単にまとまった処理を記述するための関数のような処理で、意図した処理を明確、簡潔に書くために使用します。

もしクロージャの使い方を忘れてしまったら、この記事を思い出してくださいね!

最短でプログラミングを習得したい方へ

元々ITリテラシーのある方やプログラムの学び方がわかっている方は独学で習得することも可能でしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「もう挫折したくない」
「本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい。」
「自分だけのカリキュラムで効率的に勉強したい」

そんな方はお気軽に侍エンジニア塾までご相談ください。

弊社では、

  • プログラミング基礎学習
  • オリジナルアプリ開発
  • 仕事獲得

までをひと通り学習できます。

まずは無料体験レッスンで、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

挫折しない学び方や、通常1000時間以上かかる学習時間を1/3にする方法などより具体的なアドバイスもさせていただいています。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta1

LINEで送る
Pocket

書いた人

ヤマシタ

フリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、今まで200本以上の執筆経験があります

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説