如何在Swift中串行执行闭包

时间:2017-04-06 15:24:50

标签: ios swift

我有一个在for循环中异步执行的闭包。

for i in 0..<10 {
    closure
}

如何进入for循环,等待在进入下一次迭代之前执行闭包?

4 个答案:

答案 0 :(得分:3)

这就是马克斯试图说的:

var queue = OperationQueue()

queue.maxConcurrentOperationCount = 1

for i in 0..<10 {
    queue.addOperation {
        // closure here
    }
}

答案 1 :(得分:1)

您可能想要使用NSOpertations或GCD。见Dispatch 或者你可以使用PromiseKit,如果你这么做的话。

答案 2 :(得分:1)

您可以使用Dispatch非常简单地执行此操作:

import Dispatch // Necessary for DispatchQueue
import Foundation // Necessary for sleep

let closures = [ //The array of closures to execute serially
    { print(1); sleep(1) },
    { print(2); sleep(1) },
    { print(3); sleep(1) },
    { print(4); sleep(1) },
    { print(5); sleep(1) }
]

let queue = DispatchQueue(label: "My Serial Queue") // TODO: Name me

for closure in closures {
    queue.sync(execute: closure)
}

// Alternatively:
// closures.forEach(queue.sync(execute:))

答案 3 :(得分:0)

您可以将它们添加到OperationQueue并将其maxConcurrentOperationCount设置为1.然后运行它们。