В Swift (это Swift) существует целый ряд способов для обработки асинхронно,Ждать в цикле (в любом случае, в любом случае) в Swift?
Скажем у вас есть цикл, как это - это вызов кода вызова синтаксического анализа облако, которое идет на фоне все равно.
public func runImages()
{
print("test begins...")
for i in 1...3
{
print("Tick tock tick tock ..\(i)")
PFCloud.callFunctionInBackground("blah", withParameters:["bla":i,"bla":"bla])
{
(response: AnyObject?, error: NSError?) -> Void in
print(".. done! Now go again...")
if let rr = response as? String { print(rr) }
if let err = error { print(err.domain) }
}
}
}
Как сделать так, чтобы подождать конца каждого вызова PFCloud?
Действительно ли обычный флаг лучше всего, или? (Обратите внимание, что (a) я не могу получить флаг для работы в Swift и (b), поскольку Павел указывает, что вы блокируете интерфейс!)
Что такое «Быстрый способ» в контексте вас см. здесь? Я считаю, что было бы очень нецелесообразно использовать рекурсивный шаблон здесь, например.
Не ждите. Просто выполните код, который вы хотите в закрытии. Если вы хотите, чтобы функции облачного кода выполнялись серийно, вам нужно отправить их в очередь последовательной отправки и использовать 'callFunctuon', а не' callFunctionInBackground' – Paulw11
Hi Paul - приведенный выше код будет запускать все три вызова одновременно (синхронно) , Часто вы не хотите этого: вы хотите, чтобы они запускались один за другим. Один начинается только тогда, когда заканчивается другой. – Fattie
Вы можете использовать 'dispatch_barrier_async' в очереди последовательной отправки, если вы хотите отправить блок, который будет выполняться после завершения всех трех методов. – Paulw11