闭包返回值(先前为completionBlock)

use*_*394 8 swift ios8

我想在长期操作完成后返回一些值.但此外,我想分裂逻辑和gui.

例如; 我有两节课

  1. SomeServices.swift有一个名为"getDataFromService ..."的方法
  2. MyTableViewController.swift将显示"getDataFromService"的结果

所以,以前在Objective-C中我只是在SomeServices中添加一个方法,如下所示:

(void)getDataFromService:(void (^)(NSArray *, NSError *))completionBlock{ ...... }
Run Code Online (Sandbox Code Playgroud)

在这个方法中,我只是调用completionBlock(myData, myError)将我的值返回到tableviewcontroller.

我必须在SomeServices.swift中定义的等效闭包是什么以及如何在MyTableViewController中调用它?

我知道如何调用这样的简单闭包:

   ....({
            responseData, error  in
            if(!error){
                //Do something
            }
        })
Run Code Online (Sandbox Code Playgroud)

但我没有任何想法如何定义一个与completionBlock等效的闭包.

任何帮助,将不胜感激

Sam*_*Sam 14

关闭的好处是,你可以传递你想要的一切.方法或功能 - 没关系.

您可以在参数中传递函数并调用它.

func someFunctionThatTakesAClosure(completionClosure: () -> ()) {
    // function body goes here
    if(error = false) {
       completionClosure()
    }

}

//Call it
someFunctionThatTakesAClosure({
    //Completions Stuff
    println("someFunctionThatTakesAClosure")
});
Run Code Online (Sandbox Code Playgroud)

摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/ch/jEUH0.l