これおもしろい

なにはともあれ1日1記事

@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