Apic

Cocoapods Platform License codebeat badge

Apic 与 RESTful 服务 通信,解析 JSON HTTP 响应并传递对象。

安装

CocoaPods

Swift < 2.3

pod 'Apic' '~> 2.2.4'

Swift 3.x

pod 'Apic' '~> 3.9.6'

Swift 4

pod 'Apic' '> 5.0.0'

仓库 (Repositories)

仓库是一个类,它实现了与提供 REST 资源的服务器通信的逻辑。 基本上,一个仓库具有与后端端点相对应的方法。 所有仓库都继承自泛型类 AbstractRepository

class GistsRepository: AbstractRepository {
    func requestGistsOfUser(_ user: String, completion: ([Gist]) -> Void) -> Request<[Gist]> {
        return requestArray(route: .get("https://api.github.com/users/\(user)/gists"), completion: completion)
    }
}

唯一的要求是 Gist 实现 Decodable

这个仓库现在可以被 ViewController 用来请求用户的 gists。

class GistsController: UITableViewController {

	let gistsRepository = GistsRepository()
    var gists: [Gist]?
    var gistsRequest: Request<[Gist]>?

    override func viewDidLoad() {
        super.viewDidLoad()
        requestGists()
    }

    func requestGists() {
        gistsRequest?.cancel()
        gistsRequest = gistsRepository.requestGistsOfUser("UserName", completion: { [weak self] gists in
            self?.gists = gists
        }).fail { [weak self] error in
            self?.handleError(error)
        }.finished { [weak self] in
            self?.tableView.reloadData()
        }
    }
}

GistsRepository 完成调用服务并解析响应后,它会调用你提供的 completion closure,在这种情况下,发送一个 [Gist] 数组给你。