如果您不返回回调会发生什么

时间:2015-11-27 20:26:59

标签: 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("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
}

1 个答案:

答案 0 :(得分:1)

当您传递回调时,您提供了processRequest决定何时执行的代码块。

考虑到processRequest的实现,如果将nil作为回调参数传递,则当processRequest决定调用回调函数时,不会执行其他代码。

事实上,callback参数定义为Optional

callback: ((json: JSON?, error: NSError?) -> Void)?

并且仅在not nil

时执行
callback?(json: JSON(data), error: nil)

更新

正如您所说,您没有通过nil回调,而是通过空身传递回调。鉴于processRequest的当前定义,结果是相似的:没有任何反应。

更具体地说,一个空闭包被排入主队列(有权更新用户界面的那个)。我想这会在系统中产生一个无穷小的开销,因为这个空的代码块将被同步添加到主队列中,稍后会出列并最终执行。 简而言之:没有任何事情发生。