你如何等待方法调用的正确结果?

时间:2016-11-14 18:27:25

标签: ios asynchronous promise swift3

我有一种方法,由于问题的计算负荷,有时需要几秒钟才能返回结果。请注意,这纯粹是一个“离线”问题,该功能不会调用基于Web的API。

目前,每当我要求返回方法时,它只返回nil,因为它仍然在另一个线程上处理该函数。

如何编写一个等待函数正确,非零响应的函数?

1 个答案:

答案 0 :(得分:0)

您应该使用GCD将耗时的块分派给后台线程。这里最重要的是不要用硬任务来阻止主线程。

Swift 3示例:

func doSomethingTimeConsuming(completion: ((Any)->Void)?) {
    DispatchQueue.global(qos: .background).async {
        //do time consuming task in here (background thread)
        //let result = ...
        DispatchQueue.main.async {
            //use callback here (main thread)
            //let's assume the result of your calculation is some object or struct
            completion?(result)
        }
    }
}

Any替换为您希望从函数中获得的实际结果类型。

<强>用法:

doSomethingTimeConsuming { result in
    //this closure will be called when your time consuming function completes execution
}