我想按顺序保存数据
数据已保存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.")
}
}
答案 0 :(得分:0)
我同意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
,以使程序不会挂起。