Прокрутите вниз TableView в Swift, который включает в себя множество страниц JSON - PullRequest
0 голосов
/ 18 октября 2018

ребята.Мне нужно прокрутить мой 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 голосов
/ 18 октября 2018

Похоже, вы уже сделали POC, получая данные из API и загружая их на экран.

Если организация движется вперед, вам нужно разбить этот код на несколько файлов.Чтобы не отставать, я бы предложил начать с класса API, который обрабатывает детали создания http-запросов, такие как header / body / auth.Это зависит от вас, если класс API возвращает объекты data / json или film.Вам также понадобится класс модели, который обрабатывает отслеживание того, какую страницу следует извлечь с сервера через класс api.Вы можете сохранить массив фильмов здесь или в поле зрения контроллера.

Когда пользователь прокручивает страницу вниз, вы можете либо подождать, пока он достигнет дна, показать индикатор активности ниже последней ячейки, пока происходит извлечение api, затем вставить новые результаты внизу или вы можете предварительно извлечь данные.

, что должно как минимум начать.

У объектов, возвращаемых из API, есть идентификатор / дата / порядок, которые можно использовать для будущих запросов, например, получить элементы перед ...Надеюсь, что да, и вы можете использовать это и не отслеживать, на какой странице вы находитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...