👽
【Swift UI】クロージャーによるコールバックを詳しく
クロージャーでコールバックする
クロージャー(Closure)とは
クロージャーについてざっくりと解説します。
簡潔に説明すると、名前を持たず定数や変数に代入できる関数です。
書き方
オーソドックスなクロージャーの書き方です。
{(引数: 型) -> 型 in }
下記は、引数にnameが入り「こんにちは、〇〇さん」と返すコードです。
関数の場合
func greet(name: String) -> String {
return "こんにちは、\(name)さん"
}
let wordsOfGreeting = greet(name: "ore")
print(wordsOfGreeting) // こんにちは、oreさん
クロージャーの場合
let greet = {(name: String) -> String in
return "こんにちは、\(name)さん"
}
let wordsOfGreeting = greet(name: "ore")
print(wordsOfGreeting) // こんにちは、oreさん
メリットがよく分からないと思いますが、キャプチャなどのいい感じの機能があるので調べてください!
また、クロージャーの最大のメリットは
- 一度しか使わない処理を書くこと
- 関数の引数にも使えるということ ← これ今から解説する便利機能。
コールバックとは
一般的には、電話をかけ直すと言う意味です。
ITでは、関数に引数として渡される関数であるコールバック関数のことを指します。
先ほど、クロージャーは名前を持たない関数と説明した通り関数なのでコールバックとして使えます。
コールバック関数は、処理を呼び出し元に返します。
メリット
不要な変数や定数を書かなくて済む
可読性が上がる
クロージャーのコールバック
class Person {
var name: String = "ore"
var age: Int = 23
func increaseAge(completion: (Int) -> Void) {
age = age + 2
completion(age)
}
}
let me = Person()
me.increaseAge(completion: { result in
print("result")
})
解説
increaseAge関数に引数として、completionと言う関数を入れている。completionはInt型が入りVoidを返す。Voidは何も返さないと言うこと
そして、increaseAge関数内でageに2を足してcompletionに入れている。
最後にPersonをインスタンス化してincreaseAge関数を呼んぶ。この場合だとresultの中にcompletion(age)でいれたageが入っている。
つまり、print結果は25になる。
Discussion