我有以下模型,基本的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
变量中的价格,然后重新加载表格。
但是,当我在子类(MyFancyTable)中覆盖items
时,即使在API回调期间已更新价格,记录器(在cellForRowAtIndexPath中)仍读取零价格。好像从未更新过。
记录结果:
FOUND 0 PRICES
-用于食品
FOUND 0 PRICES
-饮用
我可以确认API返回了许多价格。
任何帮助将不胜感激。谢谢!