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のビデオでも紹介されています。