今回の記事ではクロージャ(Closures)についてご紹介。正直クロージャは内容が初心者にとっては分かりづらいように感じ、また、最悪使用せずともアプリ開発などを行うことが可能です。しかし、クロージャを使用できてこそのSwiftユーザーとも考えていますのでこの記事でクロージャ初心者も簡単な例を踏まえてアプリに導入して体にクロージャを馴染ませましょう。
では早速メイン記事に移ります。
クロージャとは?
まずクロージャとは何かの説明から行っていきます。簡単にいうと関数のようなもの、もう少し詳しくいうと関数のような機能を持った変数と考えれば良いと思います。
正確に伝えるとクロージャを定義した瞬間(定義内)で関数としての機能を完結させる自己完結型のオブジェクトです。こういうと難しいですね笑。
クロージャを記述すると下記のようになります。
{ (引数) -> 戻り値の型 in
処理
}
これが最も基本的な記述方法になってくると思います。オブジェクトの定義内に関数としての処理をひっくるめて記述しているような内容です。
簡単な説明は以上にしておきます。早速使用例をご紹介しつつ手を動かしてみて実際に使用してみてください。
クロージャの簡単な使用例紹介
先ほどの簡単な記述に基づいてまずは処理を書いてみます。
/* 基本的な構造
変数名は「test_closures」
let test_closures = { (引数) -> 戻り値の型 in
処理
}
*/
//クロージャの処理
// 変数名は「test_closures」
let test_closures = {
() -> () in
print("テスト")
}
//クロージャの実行
test_closures()
// 出力:テスト
上記が引数と戻り値がないクロージャです。簡単な関数みたいですね。クロージャの部分は戻り値を「Void」にしても、省略しても同じ内容の記述になります。
//Voidで書き換え
let test_closures = {
() -> Void in
print("テスト")
}
//省略
let test_closures = {
print("テスト")
}
戻り値がと引数がない場合のみ省略は可能。
次は引数と戻り値ありのクロージャを見ていきます。
/* 基本的な構造
変数名は「test_closures」
let test_closures = { (引数) -> 戻り値の型 in
処理
}
*/
//クロージャの処理
// 変数名は「test_closures」
// 引数あり、戻り値なし
var test_closures : ((Int, Int) -> Void)
let test_closures = {
(num1: Int, num2: Int) -> Void in
print(num1 + num2)
}
//クロージャの実行
test_closures(1, 2)
// 出力:3
// 変数名は「test_closures」
// 引数あり、戻り値あり
var test_closures : ((Int, Int) -> Void)
let test_closures = {
(num1: Int, num2: Int) -> Void in
return(num1 + num2)
}
//クロージャの実行
test_closures(1,2)
// 出力:なし → test_closuresが変数としての値を戻り値として持っているのでこれを出力するにはprint関数で出力する必要がある。もしくはクロージャ内にprint関数を入れておくかで出力する。
print(test_closures(1,2))
// 出力:3
以上が簡単使用例です。ですがここまでではまだクロージャの使いやすさが分かりませんよね?
どのような場面で使用されるのかを下記で説明していきます。
クロージャの実際の使われ方 (少し応用)
実際便利と感じた使用方法は関数をクロージャ内部で使用できることです。クロージャ自体も関数の引数にできるので常時動かしている関数内にクロージャを引数にとってしまえばクロージャ内の関数を常に稼働させることができます。
内容が難しくなっているのでより詳細に解説します。
/* 基本的な構造
変数名は「test_closures」
let test_closures = { (引数) -> 戻り値の型 in
処理
}
*/
//クロージャの処理
// 変数名は「test_closures」
let test_closures = {
() -> () in
print("テスト") //テストを出力
pr() //テスト1を出力
}
//クロージャ内に潜ませる関数
func pr () -> Void {
print("テスト1")
}
//クロージャの実行
test_closures()
// 出力:テスト
// テスト1
クロージャを実行する際に関数を同時に実行できていますのでこういったものを駆使することで記述の幅が大幅に広がります。
今回の記事はここまでです。swift独自のクロージャの使い方にまずは慣れて使用できるようになっていきましょう。他にもswiftの記事を書いているので気になる記事はご参照ください。
コメント