}
上記のコードで [unowned self] が何をしているか知っていますか?ループを防ぐためであることはわかっていますが、このコードは少しわかりにくいです。何がどのようなループを防止しているのでしょうか?
より重要な質問は、[所有されていない自己] の背後にあるアクションは何でしょうか?これはどこからともなく現れたようで、何を意味するのかはわかりませんが、これがないとコードはエラーを報告します。
guard let textField =alert.textFields?.first,
リーリー上記の 2 つのコードは何を意味しますか? 「alert.textFields?.first」とはどういう意味ですか?このアラートはテキストフィールドを追加する前にテキストフィールドを参照できるのはなぜですか?
質問がたくさんあります。コード内にクロージャが現れるとめまいがしてしまいます。誰か詳しく答えていただければ幸いです。ありがとうございます。
ブロック内に循環参照がないため、上記のコードに[unowned self]を追加する必要はありません
action
是UIAlertAction 便利构造函数public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil)
のハンドラー ブロックのパラメーターは、Swift の末尾クロージャの書き込みメソッドによるものです:
リーリーtextFields
是UIAlertController
中的可变数组var textFields: [UITextField]?
guard是对
textFields
可选属性进行可选绑定,textField
は非nilのオプション値を展開した後の値です。 textFieldsのオプション値がnilの場合、次のコードは実行されません。unowned キーワードとweakはどちらも参照サイクルを中断するために使用されます。weakとの違いは、ownedは通常、参照されるインスタンスのライフサイクルが長いことが保証される場合に使用されることです。この場合、ARCはインスタンスを自動的に設定しません。なし。ただし、上記のコードに [onowned self] を追加する必要はないと思います。どこで循環参照が発生するかわかりません。
[unowned self] が続くアクションは、それがクロージャのパラメータであることを示します。これは、UIAlertAction のコンストラクターの最後のパラメータには、次のように UIAlertAction! 型のパラメータが必要であるためです。
リーリーconvenience init(title title: String!, styleスタイル: UIAlertActionStyle、ハンドラー handler: ((UIAlertAction!) -> Void)!)
このコードの意味は、alert.textFields?.first が空でない場合にのみ後続のロジックが実行され、それ以外の場合は直接返されるということです。 2 番目の let は、最初の let の textField が nil でない場合にのみ実行できます。これは Swift での一般的な使用法です。詳細についてはドキュメントを確認してください。