handler
のクロージャを記述するときUIAlertAction
、参照はself
強い (デフォルト)かweak
、またはunowned
?
このトピックに関連する投稿 ( 1、2、3、4 ) がありましたが、正直なところ、この場合にどのように役立つかわかりません。
この典型的なコードに注目しましょう:
func tappedQuitButton() {
let alert = UIAlertController(title: "Confirm quit", message: nil, preferredStyle: .ActionSheet)
let quitAction = UIAlertAction(title: "Quit", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(quitAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)
}
UIViewController
これはサブクラス内の関数でありself
、アラートを表示するビュー コントローラーでもあります。
ドキュメントには次のように記載されています。
弱い参照を使用して、その参照がその寿命のある時点で「値を持たない」可能性がある場合はいつでも参照サイクルを回避します。参照が常に値を持つ場合は、代わりに所有されていない参照を使用してください。
私は目が見えないかもしれませんが、これが についての私の質問に答えるのにどのように役立つかまだわかりませんUIAlertAction
.
上記のコードでは、その寿命のある時点でself
nil になることは可能ですか? はい。だから私はとしてマークする必要があります。self
weak
self
しかし、繰り返しになりますが、クロージャーが呼び出されたときに nil になるもっともらしいシナリオは考えられません。そのため、クロージャに関する限り、self
は常に value を持ちます。だから私はself
としてマークする必要がありunowned
ます。
self
繰り返しますが、UIAlertAction のハンドラーでどのようにキャプチャする必要がありますか?