在非转义功能中处理转义闭合



在下面的代码中,我得到了错误。

将非转义参数"完成"传递给期望 @escaping关闭。

protocol DetailViewControllerDelegate: AnyObject {
func detailViewController(_ controller: DetailViewController, doneButtonPressed button: UIBarButtonItem)
}
final class DetailViewControllerDelegateHandler: DetailViewControllerDelegate {

typealias DismissComplete = () -> Void
typealias Action = (DismissComplete) -> Void

var dissmissScene: Action?

private let model = Model()
func detailViewController(_ controller: DetailViewController, doneButtonPressed button: UIBarButtonItem) {

dissmissScene? { [unowned self] in
let value = controller.value
self.model.update(with: value)
}
}
}
final class HomeViewController: UIViewController {
private let delegateHandler = DetailViewControllerDelegateHandler()
override func viewDidLoad() {
super.viewDidLoad()
delegateHandler.dissmissScene = { completion in
// error here
self.dismiss(animated: true, completion: completion)
}
}
func buttonAction(_ sender: UIButton) {
let controller = DetailViewController.instantiateFromStoryboard()
controller.delegate = delegateHandler
present(controller, sender: self)
}
}

我能做些什么呢?

completion闭包不会转义。因为dismissScene是一个接受非转义闭包的函数。请注意,dismissScene的类型是Action,这是(DismissComplete) -> Void,而(() -> Void) -> Void。内() -> Void未标记为@escaping

您只需要将其标记为:

typealias Action = (@escaping DismissComplete) -> Void

最新更新