我有以下模型、基本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返回了一些价格。
如有任何帮助,将不胜感激。谢谢!
最佳答案
您的问题可能导致您将items
变量设置为computed属性,这意味着每次调用
试试这个:
class MyFancyTable: BaseTableController {
override var items: [Product] = [Product(title: "FOOD"),Product(title: "DRINK")]
}
关于swift - UITableViewController数据源不读取新值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55093985/