gpt4 book ai didi

swift - 在 Swift 中,为什么 GCD 不能与解析一起使用?

转载 作者:行者123 更新时间:2023-11-30 10:19:13 25 4
gpt4 key购买 nike

我已经在 In Swift, how to stop all the process until datas retrieved from parse.com in UICOLLECTIONVIEW 上问过这个问题。在执行下一个函数之前,我无法从 parse.com 检索数据。我不知道如何访问异步线程。我已将主队列声明为“first_fun()”,因此应该首先运行它。同样,它先运行,但最后结束。在此之前,执行下一个函数(“second_fun()”)。如何对该功能 block 进行排队?如何先完成异步线程?请检查我的代码。

我的代码如下:

override func viewDidLoad() {

println("START")
let queue : dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue, {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.first_fun()
})
})

second_fun()
println("END")

}

//FIRST_FUN

func first_fun() {
println("FIRST CLASS TOP")
self.par_query.findObjectsInBackgroundWithBlock({(NSArray objects, NSError error) in

if (error != nil) {
NSLog("error " + error.localizedDescription)
}
else {

println("WELCOME to PARSE")

}//ELSE ENDING

})//PARSE ENDING
println("FIRST CLASS BOTTOM")

}

//SECOND_FUN

func second_fun() {

println("WELCOME to SECOND")

}

最佳答案

你的问题的本质是“如何将异步设计变成同步设计”,这没有多大意义。当人们接受传统过程式编程培训,然后尝试解决基于功能/事件的系统中的问题时,就会遇到这种情况。

您的问题的答案是“不要这样做”。您必须学习一种新的系统设计风格,其中 secondary_fun() 中发生的所有事情都不依赖于first_fun() 的结果。如果第一个和第二个确实相关,那么您应该调用 secondary_fun() 作为 first_fun() 中的最后一个操作。

例如,如果您有一个 View 依赖于从互联网上获取的数据(这可能是一个长时间运行的操作),您通常会设置 View 以显示旋转的等待指示器,然后您将您对 findObjectsInBackgroundWithBlock() 的调用。在回调中,您将处理找到的结果,初始化其他 UI 元素,然后将等待指示器替换为您想要的 View 内容。

你必须停止程序性思考并开始功能性思考。

关于swift - 在 Swift 中,为什么 GCD 不能与解析一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28249105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com