@escapingなるものを知った
func presentAlert(title: String, message: String, completion: @escaping (_ action: UIAlertAction?) -> Void = { alert -> () in }) { let alert: UIAlertController = UIAlertController(title: title, message: message, preferredStyle: .alert) let action: UIAlertAction = UIAlertAction( title: "OK", style: .cancel, handler: completion ) alert.addAction(action) self.view?.presentAlert(alert: alert) }
こんな関数を作ったところ、
Passing non-escaping parameter completion to function expecting an @escaping closure
と怒られた。
ここで初めて@escapingという存在を知りました。
引数で渡した時に、渡された関数内で使わず、クロージャを保持する場合は、@escapingをつけなければならないそうです。
今回はpresentAlert関数を持ってるクラスの他の関数で呼んでいて、クロージャの中ではselfを使わないから循環参照は大丈夫。
でも、@escapingとか付くと、よろしくない書き方なのかな((((;゚Д゚)))))))と戦々恐々とする。
レビューしてもらう時に質問しておこう…。
追記: githubで@escapingを調べてみたけど(‘@escaping'とかescapingとかで)、あまり引っ掛からなかった。
やっぱりあまり使わない、というかライブラリとかの時に使うとかの代物なのかなぁ。
(´-`).。oO(今気づいた…これprivateにすべき関数だ…)
参照: すごくわかりやすくて助かりましたmm
Swift 3 の @escaping とは何か - Qiita