Swift, dispatch_group_wait wartet nicht

Ich versuche, mit Grand Central Dispatch zu warten, bis der Download der Dateien abgeschlossen ist, bevor ich fortfahre. Diese Frage ist ein Ableger von dieser Frage:Swift (iOS): Warten Sie, bis der Download aller Bilder abgeschlossen ist, bevor Sie @ zurücksende.

Ich versuche nur herauszufinden, wie ich dispatch_group_wait (oder ähnliches) dazu bringen kann, tatsächlich zu warten und nicht einfach fortzufahren, bevor die Downloads abgeschlossen sind. Beachten Sie, dass, wenn ich NSThread.sleepForTimeInterval verwende, anstatt downloadImage aufzurufen, alles in Ordnung ist.

Was vermisse ich

class ImageDownloader {

    var updateResult = AdUpdateResult()

    private let fileManager = NSFileManager.defaultManager()
    private let imageDirectoryURL = NSURL(fileURLWithPath: Settings.adDirectory, isDirectory: true)

    private let group = dispatch_group_create()
    private let downloadQueue = dispatch_queue_create("com.acme.downloader", DISPATCH_QUEUE_SERIAL)

    func downloadImages(imageFilesOnServer: [AdFileInfo]) {

        dispatch_group_async(group, downloadQueue) {

            for serverFile in imageFilesOnServer {
                print("Start downloading \(serverFile.fileName)")
                //NSThread.sleepForTimeInterval(3) // Using a sleep instead of calling downloadImage makes the dispatch_group_wait below work
                self.downloadImage(serverFile)
            }
        }
        dispatch_group_wait(group, DISPATCH_TIME_FOREVER); // This does not wait for downloads to finish.  Why?

        print("All Done!") // It gets here too early!
    }

    private func downloadImage(serverFile: AdFileInfo) {

        let destinationPath = imageDirectoryURL.URLByAppendingPathComponent(serverFile.fileName)

        Alamofire.download(.GET, serverFile.imageUrl) { temporaryURL, response in return destinationPath }
        .response { _, _, _, error in
            if let error = error {
                print("Error downloading \(serverFile.fileName): \(error)")
            } else {
                self.updateResult.filesDownloaded++
                print("Done downloading \(serverFile.fileName)")
            }
        }
    }
} 

Hinweis: Diese Downloads sind eine Antwort auf eine HTTP-POST-Anfrage und ich verwende einen HTTP-Server (Swifter), der keine asynchronen Vorgänge unterstützt. Daher muss ich warten, bis die vollständigen Downloads abgeschlossen sind, bevor ich eine Antwort zurücksende (siehe ursprüngliche Frage) auf die oben für weitere Einzelheiten verwiesen wird).

Antworten auf die Frage(8)

Ihre Antwort auf die Frage