如果总行数未知,如何使用UITableViewDataSourcePrefetching?

时间:2019-06-23 09:30:44

标签: ios swift uitableview

我正在尝试为UITableView实现流畅的滚动体验,因此我需要使用UITableViewDataSourcePrefetching,但是有一个问题:API不会发送总数为数据的数据。那么在这种情况下可以走走吗?

更新

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    func loadNextBatch() {
        // load next page then append to data
        self.data.append(contentsOf: requests)
    }

1 个答案:

答案 0 :(得分:-1)

您可以使用UITableViewDataSourcePrefetching的prefetchRowsAtIndexPaths方法

extension TimelineViewController: UITableViewDataSourcePrefetching {

    func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {
        DispatchQueue.global(qos: .background).async {
            for indexPath in indexPaths {
                if indexPath.row < self.timelineItems.count {
                    if timelineItems[indexPath.row].imageDownloadStatus == .none {
                        timelineItems[indexPath.row].imageDownloadStatus = .downloading
                        ImageService.shared.retrieveImage(for: timelineItems[indexPath.row].imageUrl) { [weak self] (image) in
                            timelineItems[indexPath.row].imageDownloadStatus = .downloaded
                        }
                    }
                }
            }
        }
    }

}