PagingDataController 2.1.1

PagingDataController 2.1.1

测试测试版
语言语言 SwiftSwift
许可证 MIT
发布最新版本2020年2月
SPM支持 SPM

congncif 维护。



PagingDataController

Version License Platform

PagingDataController 是一个用于简化分页加载数据的库。它通过少量代码提供简短的配置。您无需担心页面管理、何时加载下一页数据等问题。

Screenshot Pull to refresh Load more data next page

要求

  • iOS 8.0+
  • Xcode 8.3+
  • Swift 3.1+

安装

CocoaPods

pod 'PagingDataController'

Carthage

github "congncif/PagingDataController"

它是如何工作的?

Provider 是一个处理按页加载数据的组件。处理完成后,将返回对象列表或错误。

DataSource 存储由 Provider 加载的所有数据,并将它们按照页码顺序排列。

实现了 PagingDataController 控制的控制器本身包含一个 Provider 和 DataSource。虽然 dataSource 可以自动注入,但 provider 需要显式声明。

用法

  1. 创建一个新的项目。
  2. ViewController.swift 中,添加一个 tableViewcollectionView 来显示项目列表。
  3. 创建 Provider
struct GithubUsersProvider: PagingProviderProtocol {
    // custom pageSize here
    var pageSize: Int = 36

    func loadData(parameters: AnyObject?, page: Int, completion: @escaping ([[String: AnyObject]], Error?) -> Void) {
        let apiPath = "https://api.github.com/search/users?q=apple&page=\(page + 1)&per_page=\(pageSize)"
        Alamofire.request(apiPath, method: .get).responseJSON { response in
            var error: Error? = response.result.error
            var result: [[String: AnyObject]] = []

            defer {
                completion(result, error)
            }

            guard let data = (response.result.value as? [String: AnyObject]) else {
                return
            }
            result = data["items"] as! [[String: AnyObject]]
        }
    }
}
  1. ViewController.swift 中,实现 UITableViewDataSourceUICollectionViewDataSource 的方法以渲染数据,使其符合 PagingControllerProtocol 协议
// 🚀 Just 4 steps to setup a Paging View Controller

class GithubUsersViewController: UIViewController, PagingControllerProtocol, PagingViewControllable {
    @IBOutlet var tableView: UITableView!

    // 1️⃣ [Step 1]: Provider definition.
    lazy var provider = GithubUsersProvider()

    // 2️⃣ [Step 2]: setup paging in single line of code.
    /******************************************
     Copy this method into your view controller
     ******************************************/
    override func viewDidFinishInitialLayout() {
        setupPagingController()
    }

    // 3️⃣ [Step 3]: Pass parameters for fetching data by page, default is nil.

    func parametersForPage(_ page: Int) -> AnyObject? {
        return nil
    }

    // 4️⃣ [Step 4]: Handle error when fetching failed.

    func errorWarningForPage(_ page: Int, error: Error) {
        showErrorAlert(error)
    }
}
  1. 构建并运行,享受乐趣

作者

NGUYEN CHI CONG, [email protected]

许可

PagingDataController 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。