在Swift中向下滚动包含多个JSON页面的TableView

时间:2018-10-18 20:46:30

标签: swift

伙计们。我需要滚动我的TableView并从某些JSON页面加载数据。我仅在一页上执行此操作,但是我不知道如何在多个页面上执行此操作。这是API http://www.omdbapi.com/?s=world&page=2&apikey=eae75c46

此API具有属性“ TotalResult”,因此我可以将其除以10。在这种情况下,为7180/10,所以我有718页。但是我不知道该怎么办。

import UIKit

class FilmsViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var films = Films()

    override func viewDidLoad() {
        super.viewDidLoad()

        getDate()

    }

    func getDate() {
        let session = URLSession.shared

        session.dataTask(with: URL(string: "http://www.omdbapi.com/?s=world&apikey=eae75c46")!) { (data, response, error) in
            guard let data = data else { return }

            do {
                self.films = try JSONDecoder().decode(Films.self, from: data)
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            } catch {
                print(error)
            }
            }.resume()
    }

    func configureCell(cell: FilmsCell, for indexPath: IndexPath) {

        guard let search = self.films.search else { return }
        let films = search[indexPath.row]
        cell.titleFilmLabel.text = films.title
    }

}

extension FilmsViewController: UITableViewDelegate {

}

extension FilmsViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        guard let search = self.films.search else { return 0 }
        return search.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FilmsCell

        configureCell(cell: cell, for: indexPath)

        return cell
    }
}

1 个答案:

答案 0 :(得分:0)

到目前为止,您似乎已经完成了POC,可以从API获取数据并在屏幕上加载。

为使组织向前发展,您需要将此代码分解为多个文件。不要太过分,我建议从一个API类开始,该类处理创建http请求的细节,例如header / body / auth。 API类是否返回data / json或film对象取决于您。您还需要一个模型类,该模型类通过api类来跟踪接下来应从服务器获取的页面。您可以在此处或在视图控制器中保留胶片阵列。

当用户向下滚动时,您可以等待其到达底部,在api提取发生时在最后一个单元格下方显示活动指示器,然后在底部插入新结果,或者您可以预提取数据。

>

至少应该让您入门。

从api返回的对象是否具有可用于将来请求的ID /日期/顺序,例如之前获取物品...。希望是,您可以使用它而不跟踪您在哪个页面上。