微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 中 tableView 中的分页

如何解决Swift 中 tableView 中的分页

我有一个 API,它采用一个名为 "take" 的参数。在 viewDidLoad 中,我传递了 10 个数据,并获得了 10 个数据并将它们附加到我的对象数组中。我使用 scrollViewDidEndDragging 方法进行分页,如下所示。我将我的 takeCount 增加 10 倍并再次调用我的 API 并将它们附加到我现有的数组中。问题是1。对象和11。当我滚动到底部时,对象是相同的。我应该删除旧数据,但它是否违反分页逻辑?

分页

    func scrollViewDidEndDragging(_ scrollView: UIScrollView,willDecelerate decelerate: Bool) {
    
    if scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.size.height{
        
        self.takeCount += 10
        
        if self.takeCount <= self.sampleDataCountLimit{
            
            Service().fetchData(count: self.takeCount) { (result) in
                
                switch result{
                
                case .success(let cars):
                    
                    //self.carModel.removeAll(keepingCapacity: false)
                    self.carModel.append(contentsOf: cars)
                    
                    dispatchQueue.main.async {
                        
                        self.tableView.reloadData()
                        print(self.carModel.count)
                        print(self.carModel)
                    }
                    
                case .failure(let error):
                    
                    print(error.localizedDescription)
                }
            }
        }
        
        
    }
}

解决方法

当您使用 take=20 参数调用 API 时,它只返回前 20 个项目,并且这 20 个项目还包括 API 使用 take=10 返回的相同项目。因此,当您将新结果附加到之前的结果时,您会得到重复的项目,因为您之前的结果已经包含了新结果中的一些项目。这意味着您每次调用 API 时都需要用新数据替换旧数据,以避免项目重复。

分页通常不会那样工作。 API 通常应接受范围(类似于 start=10&end=20)或页码(可选地带有页面大小,例如 pagesize=10&pagenumber=2)。

你应该检查你的 API 是否支持类似的东西。

或者,如果返回的项目数量永远不会很大,您可以选择完全不使用分页并在一个请求中获取所有项目。

如果项目数量可能很大,但您的 API 只能返回前 N 个项目,那么您可能会保留先获取前 N 个项目,然后是 2N 个项目,然后是 3N 个的逻辑以此类推,每次都完全替换数据,但这远非理想。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。