Reputation: 111
i have code where i add one constant every second to my array, how can i update my progress bar every second when array is changed?
var array: [Int] = []
override func viewWillAppear(_ animated: Bool) {
upgradeArray()
}
func upgradeArray() {
for i in 0...10 {
sleep(1)
array.append(i)
print(i)
let percentProgress = Float(Float(self.array.count)*100.0/10.0)
progressBar.setProgress(percentProgress, animated: true)
}
}
Upvotes: 0
Views: 11047
Reputation: 111
done with DispatchQueue.global(priority: .default).async
func upgradeArray() {
for i in 0...10 {
DispatchQueue.global(priority: .default).async {
//sleep(1)
self.array.append(i)
print(i)
DispatchQueue.main.async(execute: {
let percentProgress = Float(Float(self.array.count)*100.0/10.0)
self.progressBar.setProgress(percentProgress, animated: true)
})
}
}
}
Upvotes: 0
Reputation: 11928
Use a timer. Assuming your progress view is 0 to 1 and incrementing by 0.1 each second...
var timer: Timer?
var array = [String]()
func doStuff() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
self.array.append("foo")
let change: Float = 0.1
self.progressView.progress = self.progressView.progress + (change)
if self.progressView.progress >= 1.0 {
self.timer?.invalidate()
}
})
}
Upvotes: 1