在Swift 2中创建ASYNC任务

时间:2015-08-24 08:10:21

标签: ios swift asynchronous callback closures

我想向用户显示地图中的当前位置,我知道这不是即时任务。我想在ASYNC任务中调用我的showCurrentLocation()函数。我试图学习回调闭包,但我无法理解如何为此创建ASYNC任务。我知道这不是stackoverflow的最佳问题模板,但我不知道我怎么能有不同的问题。 感谢您的任何帮助。 有一个很好的编码。

2 个答案:

答案 0 :(得分:5)

在过去,我创建了一个名为AsyncTask的课程,用于此处描述的课程。

最近我为 swift 3

更新了它

它有两种通用类型:

BGParam - 执行时发送给任务的参数类型。

BGResult - 后台计算结果的类型。

如果不需要其中一个(或两个),您可以将其设置为Optional或忽略。

在代码示例中,我引用了函数showCurrentLocation()&您在OP& amp;提到的getCurrentLocation()评论。 BGParam设置为Int& BGResults设置为CLLocationCoordinate2D

AsyncTask(backgroundTask: {(param:Int)->CLLocationCoordinate2D in
        print(param);//prints the Int value passed from .execute(1)
        return self.getCurrentLocation();//the function you mentioned in comment
        }, afterTask: {(coords)in
            //use latitude & longitude at UI-Main thread
            print("latitude: \(coords.latitude)");
            print("latitude: \(coords.longitude)");
            self.showCurrentLocation(coords);//function you mentioned in OP
    }).execute(1);//pass Int value 1 to backgroundTask

答案 1 :(得分:4)

有一项名为GCD (Grand Central Dispatch)的技术可用于执行此类任务。

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
    // do some task
    dispatch_async(dispatch_get_main_queue()) {
        // update some UI
    }
}