将问题与循环中的延迟同步

我试图延迟循环中的特定线程,我没有得到我想要的行为。 我希望1B只在1A完成后运行,而2A在一个单独的线程上并行运行。 我的实现运行1A然后1B然后2A 。 知道如何解决这个问题吗?

履行

 override func viewDidLoad() { super.viewDidLoad() // 1 DispatchQueue.main.async { self.loopManager(printable: "1A") // 1A self.loopManager(printable: "1B") // 1B } // 2 DispatchQueue.main.async { self.loopManager(printable: "2A") // 2A } } func loopManager(printable: String) { for i in 0...3 { doABC(printable: String(i) + ", " + printable) sleep(1) } } func doABC(printable: String) { print(printable) } 

日志

 0, 1A 1, 1A 2, 1A 3, 1A 0, 1B 1, 1B 2, 1B 3, 1B 0, 2A 1, 2A 2, 2A 3, 2A 

您在同一个线程中运行代码。 你需要在另一个线程中运行2A

 DispatchQueue.global().async { self.loopManager(printable: "2A") // 2A } 

输出样本:

 0, 1A 0, 2A 1, 2A 1, 1A 2, 1A 2, 2A 3, 1A 3, 2A 0, 1B 1, 1B 2, 1B 3, 1B