我想按顺序保存数据

数据保存0
数据保存1
数据保存2
....

但是实际输出是这样的:
-数据保存4
-数据保存0
-数据保存2
-数据保存3
-数据保存1

我该如何解决这个问题?

提前致谢

var anArray : [String] = []


override func viewDidLoad() {
    super.viewDidLoad()


    anArray.append("profilFotograflari/070091.jpg")
    anArray.append("profilFotograflari/070092.jpg")
    anArray.append("profilFotograflari/077111.jpg")
    anArray.append("profilFotograflari/077112.jpg")
    anArray.append("profilFotograflari/077113.jpg")
    anArray.append("profilFotograflari/077115.jpg")
    anArray.append("profilFotograflari/079999.jpg")

    let myGroup = DispatchGroup()

    for i in 0 ..< 5 {

        myGroup.enter()
        let pathReference = Storage.storage().reference(withPath: "\(anArray[i])")

        pathReference.getData(maxSize: 2 * 1024 * 1024) { (data, error) in
            if let error = error {
                print("An error has occured!")
            } else {
                print("Data saved \(i)")
                myGroup.leave()

            }

        }

    }

    myGroup.notify(queue: .main) {
        print("Finished all requests.")
    }

}

最佳答案

我同意Rob的评论,除非您真的必须这样做,否则您可能不想这样做,因为这会减慢保存过程的速度。如果您需要使它们按顺序排列,而您确实要使用DispatchGroup进行操作,则可以执行以下操作:

let group = DispatchGroup()

for i in 0 ..< 5 {
    group.enter()
    asyncTask { // Use your getData function here
        print("Done: \(i)")
        group.leave()
    }
    group.wait()
}


我还要指出,在您的代码中:


  
if let error = error {
   print("An error has occured!")
} else {
   print("Data saved \(i)")
   myGroup.leave()
}



如果出现错误,将不会调用“ leave”,并且永远不会通知您完成。即使出现错误,您也可能应该leave,以使程序不会挂起。

10-07 19:18
查看更多