Так у меня есть этот код ниже:Swift iOS: Как заставить цикл с асинхронным кодом работать синхронно?
func handleSendPost() {
let postRef = Global.FIRDB!.child("posts").childByAutoId()
for p in postComponents {
var values: [String : Any] = ["type": p.type!.rawValue, "text": p.text]
let childRef = reference.childByAutoId()
childRef.updateChildValues(values, withCompletionBlock: {
(err, ref) in
if err != nil {
print(err)
return
}
// object successfully saved
})
}
}
Это в основном приложение IOS для блогов. Когда кто-то создает сообщение, он разбивается на компоненты, которые могут быть текстом или изображением. После завершения редактирования он будет сохранен в Firebase, вызвав функцию асинхронизации updateChildValues
. Проблема в том, что я хочу поддерживать порядок postComponents
. Если я запустил код выше, порядок может испортиться, потому что это зависит от того, как быстро работает updateChildValues
.
Я уже пробовал использовать DispatchSemaphore
(iOS 10) безрезультатно.
Как насчет http://stackoverflow.com/questions/27177268/how-to-run-synchronically-two-functions-with-async-operations-on-ios-using-swift – rmaddy
@rmaddy hmm, который может работать. но я бы предпочел более чистое решение, не создавая массив «NSOperationQueue» благодаря btw! Я дам ему снимок – yonasstephen