【Swift】クロージャのescapingについて
目次
@escapingとはなにか
関数に引数として渡されたクロージャがスコープから抜けても存在する可能性がある場合に付与する属性です。
escapingをつけることによって、クロージャが関数内部の変数をキャプチャし、関数外のスコープでも変数を保持し実行することができます。
コンパイラはescapingの有無でクロージャがキャプチャされる必要があるかを判断します。
いつ使うのか
なかなか使い時が想像しづらい属性ですが、例として、クロージャの中でクロージャで使用した場合
に使用することがあります。
通信処理をラップしている処理を想像してください。SwiftのURLSession
の処理をラップしたメソッドの引数にクロージャを指定しています。GetData関数
の引数に指定したクロージャには、escaping属性
を付与しないとエラーになります。
エラーになる理由は、関数内部で、HTTPリクエスト
のクロージャ
で使用しているからです。クロージャはスコープが独立しているので、GetData関数
のクロージャは、別のスコープで実行されることになるからです。
1 |
|
【Swift】クロージャのescapingについて
https://blog.djima.net/2021/07/04/【Swift】クロージャのescapingについて/