伙计们。我需要滚动我的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
}
}
答案 0 :(得分:0)
到目前为止,您似乎已经完成了POC,可以从API获取数据并在屏幕上加载。
为使组织向前发展,您需要将此代码分解为多个文件。不要太过分,我建议从一个API类开始,该类处理创建http请求的细节,例如header / body / auth。 API类是否返回data / json或film对象取决于您。您还需要一个模型类,该模型类通过api类来跟踪接下来应从服务器获取的页面。您可以在此处或在视图控制器中保留胶片阵列。
当用户向下滚动时,您可以等待其到达底部,在api提取发生时在最后一个单元格下方显示活动指示器,然后在底部插入新结果,或者您可以预提取数据。
>至少应该让您入门。
从api返回的对象是否具有可用于将来请求的ID /日期/顺序,例如之前获取物品...。希望是,您可以使用它而不跟踪您在哪个页面上。