2016-11-14 56 views
-1

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

当前,无论何时我要求返回该方法,它只返回nil,因为它仍然在另一个线程上的函数上工作。

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

+3

不要等待。计算功能完成时通知。 – vadian

+0

@vadian。你能展示任何例子吗?这肯定会让问题进一步上行,但这同样是问题吗? –

+0

这是同样的问题,但不像轮询(等待)它不会浪费任何资源。 – vadian

回答

0

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

斯威夫特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 
} 
+0

是的,这看起来很有希望,但问题在于耗时函数的结果也是视图的主要特征,所以在这个问题得到解决之前不会发生太多事情。我可以使用完成处理程序在主线程上查找结果吗? –

+0

@JamesStonehill如果你想在回调中获得计算结果,请检查更新版本。 – alexburtnik