#ios #swift #progress-bar #swift3 #dispatch-async
#iOS #swift #Индикатор выполнения #swift3 #отправка -асинхронная
Вопрос:
у меня есть код, в котором я добавляю одну константу каждую секунду в свой массив, как я могу обновлять индикатор выполнения каждую секунду при изменении массива?
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)
}
}
Комментарии:
1. мне нужно показать пользователю, как база будет извлекать
Ответ №1:
Используйте таймер. Предполагая, что ваше представление о ходе выполнения равно 0-1 и увеличивается на 0,1 каждую секунду…
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()
}
})
}
Комментарии:
1. Я не уверен, чего вы пытаетесь достичь, но если вы уже добавляете объекты в массив каждую секунду, я уверен, что вы можете решить это в течение того же таймера. Если вы знаете, сколько объектов вы добавляете, вы можете изменить
change
константу на 1 / общее количество ожидаемых элементов.2. мне нужно вставить базу JSON из более чем 16000 стрелок в базу CoreData
Ответ №2:
выполнено с помощью DispatchQueue.global (приоритет: .default).асинхронный
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)
})
}
}
}
Комментарии:
1. может ли мне помочь два целых значения, например, первый массив var: [Int] = [1500] amp; var total = 500, поэтому я хочу, чтобы тип вывода let value = array / total в swift 3.0 использовался вашим методом