我想按顺序保存数据
数据保存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
,以使程序不会挂起。