Swift 如果不返回回调,会发生什么
现在我有了下一个函数:Swift 如果不返回回调,会发生什么,swift,swift2,Swift,Swift2,现在我有了下一个函数: func processRequest(path: String, callback: ((json: JSON?, error: NSError?) -> Void)?) { // Code ... dispatch_async(dispatch_get_main_queue()) { callback?(json: JSON(data), error: nil) } }) 函数的调用方式: processRequest("te
func processRequest(path: String, callback: ((json: JSON?, error: NSError?) -> Void)?) {
// Code ...
dispatch_async(dispatch_get_main_queue()) {
callback?(json: JSON(data), error: nil)
}
})
函数的调用方式:
processRequest("test") { (json: JSON?, error: NSError?) in
// Play with returned data
}
我的问题是:如果我不返回回调,会发生什么?
这很糟糕,否则什么可怕的事情都不会发生
情况示例:
func processRequest(path: String, callback: ((json: JSON?, error: NSError?) -> Void)?) {
// Code ...
if (condition) {
// What will happen if I am here and not return back "callback"
} else {
dispatch_async(dispatch_get_main_queue()) {
callback?(json: JSON(data), error: nil)
}
}
})
processRequest("test") { (json: JSON?, error: NSError?) in
// Play with returned data
}
当您传递回调时,您将提供一个代码块,
processRequest
决定何时执行
给定processRequest
的实现,如果将nil
作为回调参数传递,则当processRequest
决定调用回调函数的时间时,不会执行额外的代码
实际上,回调
参数定义为可选
callback: ((json: JSON?, error: NSError?) -> Void)?
只有当它是而不是nil
callback?(json: JSON(data), error: nil)
更新
正如您所指出的,您没有传递nil
回调,而是传递了一个带有空主体的回调。考虑到当前对processRequest
的定义,结果是类似的:什么都没有发生
更具体地说,将一个空闭包排入主队列(有权更新用户界面的队列)。我认为这将在系统中产生无限小的开销,因为空代码块将被同步添加到主队列中,随后退出队列并最终执行。
同样,简短的回答是:什么也没发生 没有什么可怕的事情会发生,有时候你真的需要这样的东西。大多数情况下,虽然您希望最终调用它,可能是在30秒超时后。好的,但是如果我设置了回调,并且它不是nil,但我不会返回它。在我的逻辑中,函数请求的代码正在等待回调返回,但我不会这样做。你说的
我不会返回它是什么意思?