Penutupan, gelung dalam pantas dan isu medan teks dalam amaran
typecho
typecho 2017-06-24 09:44:21
0
2
1007
@IBAction func addName(_ sender: AnyObject) { let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert) let saveAction = UIAlertAction(title: "Save", style: .default) { [unowned self] action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else {return} self.names.append(nameToSave) self.tableView.reloadData() } let cancelAction = UIAlertAction(title: "Cancel", style: .default) alert.addTextField() alert.addAction(saveAction) alert.addAction(cancelAction) present(alert, animated: true)

}

Adakah anda tahu apa yang [unowned self] lakukan dalam kod di atas? Saya tahu ia adalah untuk menghalang gelung, tetapi kod ini agak sukar untuk difahami Apakah dan gelung apa yang dihalang?

Persoalan yang lebih penting ialah, apakah tindakan di sebalik [unowned self]? Nampaknya kelihatan tidak jelas Saya tidak tahu maksudnya, tetapi tanpanya, kod itu akan melaporkan ralat.

jaga biar textField = alert.textFields?.first,

let nameToSave = textField.text else {return}

Apakah maksud kedua-dua kod di atas? Apakah maksud "alert.textFields?.first"? Mengapakah amaran ini boleh merujuk medan teks sebelum menambah medan teks?

Terdapat banyak soalan Saya menjadi pening apabila penutupan muncul dalam kod saya harap seseorang dapat menjawabnya dengan terperinci.

typecho
typecho

Following the voice in heart.

membalas semua (2)
某草草
  1. Tidak perlu menambah [unowned self] pada kod di atas, kerana tiada rujukan bulat di dalam blok

  2. Parameter blok pengendali dalam
  3. action是UIAlertAction 便利构造函数public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil)di atas adalah kerana kaedah penulisan penutupan Swift Bersamaan dengan:

  4. textFieldsUIAlertController中的可变数组var textFields: [UITextField]?
    guard是对textFields可选属性进行可选绑定,textFieldialah nilai selepas nilai pilihan dibongkar dan bukan nil Apabila nilai pilihan TextFields adalah nil, kod berikut tidak akan dilaksanakan

    let saveAction = UIAlertAction(title: "", style: .default, handler: { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else {return} self.names.append(nameToSave) self.tableView.reloadData() })
    过去多啦不再A梦

    Kata kunci yang tidak dimiliki dan yang lemah kedua-duanya digunakan untuk memecahkan kitaran rujukan. Perbezaan daripada yang lemah ialah yang dimiliki biasanya digunakan apabila contoh yang dirujuk boleh dijamin mempunyai kitaran hayat yang lebih lama tiada. Tetapi saya fikir tidak perlu menambah [diri sendiri] pada kod di atas. Saya tidak nampak di mana rujukan pekeliling akan berlaku di sini.

    Tindakan yang diikuti oleh

    [unowned self] menunjukkan bahawa ia adalah parameter penutupan, kerana parameter terakhir pembina UIAlertAction memerlukan parameter jenis UIAlertAction!, seperti berikut:
    convenience init(title title: String!, style gaya: UIAlertActionStyle, pengendali pengendali: ((UIAlertAction!) -> Void)!)

    guard let textField = alert.textFields?.first, let nameToSave = textField.text else {return}

    Maksud kod ini ialah logik seterusnya akan dilaksanakan hanya apabila alert.textFields?.first tidak kosong, jika tidak, ia akan dikembalikan terus. Let kedua hanya boleh dilaksanakan apabila textField bagi let pertama bukan nol. Ini adalah penggunaan biasa dalam swift Anda boleh menyemak dokumentasi untuk butiran.

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!