gpt4 book ai didi

swift - 如何让 task2 在 task1 快速完成后执行?使用 dispatch_sync?

转载 作者:搜寻专家 更新时间:2023-11-01 07:23:57 25 4
gpt4 key购买 nike

问题:

我有两个任务:任务 1 和任务 2。我想在 task1 完成后执行 task2。

我的代码:

let globalQueueDefault = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

dispatch_sync(globalQueueDefault){

self.activityIndicatorView.hidden = false
self.activityIndicatorView.startAnimating()

task1()

sleep(6)
dispatch_sync(globalQueueDefault) { () -> Void in

task2()
}
}

解释:

task1 应该从互联网上下载一些东西,所以我使用 sleep(6) 。我认为这个解决方案不好,因为我们不能确定互联网是否可以正常工作。那么你有没有在 task1 结束后向 task2 发送信号的解决方案?非常感谢你。 !

我的关闭代码是这样的

func getTheSearchLocationAndRange(completed: FinishedDownload) {
Task1()
completed()
}
@IBAction func loginAction(sender: AnyObject) {

getTheSearchLocationAndRange { () -> () in
Task2()
}
}

谢谢!

最佳答案

如何使用 SWIFT 闭包:

引用:

请引用苹果指南:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html


示例:

typealias FinishedDownload = () -> ()

override func viewDidLoad() {
super.viewDidLoad()

getTheSearchLocationAndRange()
}

func getTheSearchLocationAndRange(completed: FinishedDownload) {

// Code for searching Location Range HERE

completed()
}

getTheSearchLocationAndRange { () -> () in
loadDataFromDatabase()
}

解释:

1) FinishedDownload 是闭包。

2) 当调用getTheSearchLocationAndRange()时,其代码会一直执行到completed()行,等待函数的所有进程完成。

3) 一旦进程完成(例如下载),completed() 调用闭包,该闭包激活 getTheSearchLocationAndRange { () -> () in 中定义的代码.

4) 因此,loadDataFromDatabase() 仅在 getTheSearchLocationAndRange() 完全执行完毕且数据存在(不是零)时调用。

编辑:

这就是你所做的:

func getTheSearchLocationAndRange(completed: FinishedDownload) {
Task1()
completed()
}
@IBAction func loginAction(sender: AnyObject) {

getTheSearchLocationAndRange { () -> () in
Task2()
}
}

这是你应该做的:

typealias FinishedDownload = () -> ()

@IBAction func loginAction(sender: AnyObject) {
Task1()
}

func Task1(completed: FinishedDownload) {
//code for Task1
completed()
}

Task1 { () -> () in
Task2()
}

关于swift - 如何让 task2 在 task1 快速完成后执行?使用 dispatch_sync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188235/

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