我有一种方法,由于问题的计算负荷,有时需要几秒钟才能返回结果。请注意,这纯粹是一个“离线”问题,该功能不会调用基于Web的API。
目前,每当我要求返回方法时,它只返回nil,因为它仍然在另一个线程上处理该函数。
如何编写一个等待函数正确,非零响应的函数?
答案 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
}