假设我有一个函数,它有一个完成处理程序,然后调用另一个函数,完成处理程序如下:
func register(withCompletion complete: @escaping (() -> Void)) {
self.sendRegisterRequest(withCompletion: { (error: Error?) -> () in
if error != nil {
self.performSegue(withIdentifier: "ErrorVCSegue", sender: nil)
}
else {
complete()
}
})
}
如果发生错误,它将调用complete()
来segue。
我可以这样segue离开,不调用complete()
吗?我不需要从这个函数返回,因为我现在想转到另一个视图控制器。
谢谢。
这是个坏主意。无论如何都应该调用一个完成处理程序。呼叫方正在等待响应。它想知道什么时候完成。这就是拥有一个完成处理程序的全部意义。
在您的情况下(像许多其他情况一样),如果完成处理程序接受布尔参数(和/或错误参数)会好得多。这样,完成处理程序提供了关于方法成功或失败的一些基本信息。
试一下
override func viewDidLoad() {
super.viewDidLoad()
register { (error) in
if error == nil {
// do what you want in success case
} else {
self.performSegue(withIdentifier: "ErrorVCSegue", sender: nil)
}
}
}
func register(withCompletion complete: @escaping ((_ error: Error?) -> Void)) {
self.sendRegisterRequest(withCompletion: { (error: Error?) -> () in
complete(Error)
})
}
谢谢:)