我有以下模型、基本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/

10-15 13:41