У меня есть UITableView, каждый UITableViewCell имеет свою собственную асинхронную задачу (вызов Webservice), ячейка должна быть уведомлена о завершении своей задачи, чтобы обновить метки, задача вызывается каждые 30 секунд. Я не хочу перерисовывать весь UITableView каждый раз.
Вот что я сделал до сих пор:
class ViewModel {
var name, result: String
var url: String
init () {
let timer = Timer.scheduledTimer(withTimeInterval: 30, repeats: true, block: self.startUpdating())
}
func startUpdating() {
let dispatchQueue = DispatchQueue(label: "startUpdating", qos:.utility)
dispatchQueue.async{
self.callWebservice()
// how can i notify my cell about the new changes
}
}
func callWebservice(){
//call web service and update name and result
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let vm = viewModels[indexPath.row]
cell.textLabel = vm.name
cell.detailTextLabel = vm.result
return cell
}