现在我有了下一个功能:
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
}
答案 0 :(得分:1)
当您传递回调时,您提供了processRequest
决定何时执行的代码块。
考虑到processRequest
的实现,如果将nil
作为回调参数传递,则当processRequest
决定调用回调函数时,不会执行其他代码。
事实上,callback
参数定义为Optional
callback: ((json: JSON?, error: NSError?) -> Void)?
并且仅在not nil
callback?(json: JSON(data), error: nil)
正如您所说,您没有通过nil
回调,而是通过空身传递回调。鉴于processRequest
的当前定义,结果是相似的:没有任何反应。
更具体地说,一个空闭包被排入主队列(有权更新用户界面的那个)。我想这会在系统中产生一个无穷小的开销,因为这个空的代码块将被同步添加到主队列中,稍后会出列并最终执行。 简而言之:没有任何事情发生。