検索

ホームページ  >  に質問  >  本文

Swift のクロージャ、ループ、およびアラートのテキストフィールドの問題

リーリー

}

上記のコードで [unowned self] が何をしているか知っていますか?ループを防ぐためであることはわかっていますが、このコードは少しわかりにくいです。何がどのようなループを防止しているのでしょうか?

より重要な質問は、[所有されていない自己] の背後にあるアクションは何でしょうか?これはどこからともなく現れたようで、何を意味するのかはわかりませんが、これがないとコードはエラーを報告します。

guard let textField =alert.textFields?.first,

リーリー

上記の 2 つのコードは何を意味しますか? 「alert.textFields?.first」とはどういう意味ですか?このアラートはテキストフィールドを追加する前にテキストフィールドを参照できるのはなぜですか?

質問がたくさんあります。コード内にクロージャが現れるとめまいがしてしまいます。誰か詳しく答えていただければ幸いです。ありがとうございます。

typechotypecho2704日前1073

全員に返信(2)返信します

  • 某草草

    某草草2017-06-24 09:46:21

    1. ブロック内に循環参照がないため、上記のコードに[unowned self]を追加する必要はありません

    2. action是UIAlertAction 便利构造函数public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil) のハンドラー ブロックのパラメーターは、Swift の末尾クロージャの書き込みメソッドによるものです:

    3. textFieldsUIAlertController中的可变数组var textFields: [UITextField]?
      guard是对textFields可选属性进行可选绑定, textFieldは非nilのオプション値を展開した後の値です。 textFieldsのオプション値がnilの場合、次のコードは実行されません。

      リーリー

      返事
      0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-24 09:46:21

    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 での一般的な使用法です。詳細についてはドキュメントを確認してください。

    返事
    0
  • キャンセル返事