Swift 5 как лучше использовать обработчик завершения в UIAlertController?

#swift #alert

#swift #предупреждение

Вопрос:

Немного разъяснений по поводу замыканий и конкуренции в отношении оповещений. какое лучшее использование здесь? как, если я должен, использовать «действие» во втором случае? результат, похоже, тот же, он работает, но я хотел бы лучше понять, ПОЧЕМУ.

 import UIKit

struct exapleStruct {
    var inHotel = true
}

class ViewController : UIViewController {

    var exapleStruct : exapleStruct!
    var detailTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()


        let myAlertController = UIAlertController(title: "Add or Change value", message: "", preferredStyle: .alert)

        //firstExample
        let booleanChange = UIAlertAction(title: "change", style: .default, handler: self.handlerForBool)
        //second exampple how shoukld I use "action" ?? why is it there?
        let booleanChange2 = UIAlertAction(title: "change", style: .default) { (action) in
            print(self.exapleStruct.inHotel)
            self.detailTable.reloadData()
        }


        myAlertController.addAction(booleanChange)
        present(myAlertController, animated: true, completion: nil)

    }

func handlerForBool(alertARgument: UIAlertAction!) {
    print(exapleStruct.inHotel)
    self.detailTable.reloadData()
}


}
 

Ответ №1:

Используя это

 let booleanChange2 = UIAlertAction.init(title: "option1", style: .default, 
    handler: handlerForBool(alertARgument:))
let booleanChange3 = UIAlertAction.init(title: "option2", style: .default, 
    handler: handlerForBool(alertARgument:))
 

 func handlerForBool(alertARgument: UIAlertAction!) {
    print(exapleStruct.inHotel)
    self.detailTable.reloadData()
}
 

полезно, когда вам нужно одно и то же действие для нескольких предупреждений, это возможность повторного использования функции

Комментарии:

1. хорошо, ваше объяснение по этому вопросу понятно, но ‘{ (action) in ‘ как следует использовать?

2. он передается как ссылка, которую вы можете использовать, например, используя ее заголовок или стиль, если вам нужно, иначе это бесполезно

3. хорошо, значит, нет другого использования, кроме «получения» данных из него, верно? Спасибо!

4. да, в некоторых случаях также может потребоваться расширить UIAlertAction класс, поэтому приложите дополнительную информацию