見出し画像

Swiftでいこう! - Closure(Trailing Closure)

Swift5.3で追加された機能

multiple trailing closure

について。

わかりやすい以下すごくわかりやすいです。その下はapple公式に説明してあるgithubのサイトです。

// Without trailing closure:
UIView.animate(withDuration: 0.3, animations: {
 self.view.alpha = 0
})

上記のコードをtrailing closure:を使うと、

// With trailing closure:
UIView.animate(withDuration: 0.3) {
 self.view.alpha = 0
}

となります。

実際は、"trailing closure"にするとラベル

animations:

が除かれてシンプルになって、

self.view.alpha = 0

の部分は"{}"のみでかこまれています。シンプルになりました。ここまでが今まで通りの一つだけの"Closure"

これが複数繋がる場合にはこれまでであれば、

// Without trailing closure:
UIView.animate(withDuration: 0.3, animations: {
 self.view.alpha = 0
}, completion: { _ in
 self.view.removeFromSuperview()
})

これをtrailing closure(multiple closures)を使うと、

// With trailing closure
UIView.animate(withDuration: 0.3, animations: {
 self.view.alpha = 0
}) { _ in
 self.view.removeFromSuperview()
}

trailing closureを使った下のコードではcompletion:のラベルがなくてわかりにくくなってしまいます。

その解決策として考えられたのが、2つめの Closureのラベルを残すということになっています。

// Multiple trailing closure arguments
UIView.animate(withDuration: 0.3) {
 self.view.alpha = 0
} completion: { _ in
 self.view.removeFromSuperview()
}

スッキリして、2つ目のClosureも見やすくなりました。これが変更点となります。

WWDCのビデオでも紹介されています。


この記事が気に入ったらサポートをしてみませんか?