CompletionHandler不能在UIAlertController中使用闭包

时间:2017-06-15 14:27:59

标签: swift

有这样的警告功能:

var completionHandlers: [() -> Void] = []

 func alert(header: String,
               message: String,
               okButton: String,
               completionHandler: @escaping () -> Void) {

    let alert: UIAlertController = UIAlertController.init(title: header,
                                                          message: message,
                                                          preferredStyle: UIAlertControllerStyle.alert)

    let ok: UIAlertAction = UIAlertAction.init(title: okButton,
                                               style: UIAlertActionStyle.default) { (_) in
                                                alert.dismiss(animated: true, completion: {
                                                    self.completionHandlers.append(completionHandler)
                                                })
    }

    alert.addAction(ok)

    self.present(alert, animated: true)
}

这里使用了这个函数:

self.alert(header: "Warning", message: "The date of end must be selected", okButton: "Ок", completionHandler: {
                print("test")
            })

所以问题是,我的完成处理程序根本不起作用。即使测试也没有在控制台中打印。那么如何使用闭包来纠正make处理程序呢?

1 个答案:

答案 0 :(得分:0)

您实际上从未调用传递给alert的完成处理程序。您所做的只是将其添加到数组中。

不需要completionHandlers数组(至少不在您发布的代码中)。而且您无需在警报操作中解除警报。

将警报操作更改为:

let ok: UIAlertAction = UIAlertAction.init(title: okButton, style: .default) { (_) in
    completionHandler()
}