UITableViewController数据源不读取新值

时间:2019-03-11 01:04:25

标签: swift uitableview datasource subclass

我有以下模型,基本的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返回了许多价格。

任何帮助将不胜感激。谢谢!

0 个答案:

没有答案