我得到不可预测的结果,我想知道为什么。我调用了两个函数。第一次,第二个函数先完成,但在那之后,它工作了,它们按顺序完成。我是Swift的新手,所以我迷路了。
下面是两个调用:
updateValue(value: row, picker: picker.tag)
updateResult()
updateValue调用一个web服务,该服务使用:
...
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) {(response, data, error) -> Void in
if error != nil {
println("error")
} else {
println(response)
}
...
则updateResult也使用web服务调用读取数据。
...
var task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {
(data, response, error) -> Void in
...
因为updateValue是异步的(我在这里读到它应该是异步的),我不确定我应该怎么做。我也很困惑为什么它只在第一次使用时失效。如果顺序是不可预测的,为什么行为如此可预测?
谢谢
现在我可能是错误的,但在我看来,sendAsynchronousRequest
很可能是一个异步调用:-)
换句话说,if将任务分配给另一个正在执行的"线程",并且可能在实际工作完成之前返回给您。
如果您想要同步行为,您可能最好同步调用它,或者至少等到异步操作完成后再执行依赖步骤(例如使用completionHandler
)。