У меня есть следующая модель, базовый класс UITableViewController и подкласс UITableViewController:
Модель
class Product {
var title: String
var prices: [Int]
}
UITableViewController - Суперкласс
class BaseTableController: UITableviewController {
var items: [Product] = [Product]()
override func viewDidLoad() {
super.viewDidLoad()
fetchData()
}
// MARK: - UITableViewDataSource
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
let item = items[indexPath.item]
Logger.debug("FOUND \(item.prices.count) PRICES")
return cell
}
// MARK: - Data
func fetchData() {
let dispatchGroup = DispatchGroup()
items.forEach { (item) in
dispatchGroup.enter()
APIService.shared.getPrices(product: item) { (prices) in
item.prices = prices
dispatchGroup.leave()
}
}
dispatchGroup.notify(queue: DispatchQueue.main) {
self.tableView.reloadData()
}
}
}
UITableViewController - Подкласс
class MyFancyTable: BaseTableController {
override var items: [Product] {
set {}
get {
return [
Product(title: "FOOD"),
Product(title: "DRINK")
]
}
}
}
Я буду использовать MyFancyTable для получения цен из другой категории продуктов.
КогдаAPI возвращает ответ, он обновит цены в переменной items
, а затем перезагрузит таблицу.
Однако, когда я переопределяю items
в подклассе (MyFancyTable), даже если цены былиобновленный во время обратного вызова API, регистратор (в cellForRowAtIndexPath) все еще читает нулевые цены.Как будто оно никогда не обновлялось.
Журнал результатов:
FOUND 0 PRICES
- для еды
FOUND 0 PRICES
- для питья
Я могу подтвердитьAPI возвращает несколько цен.
Любая помощь будет оценена.Спасибо!