SLazeKit 是一个易于使用的 Swift restful 扩展和类的集合。不要花费数小时编写代码来将你的 rest api 请求映射到模型和 CoreData 序列化。停止浪费你的时间!
SLazeKit 允许你
Codable
协议映射你的模型CoreData
模型API
& CoreData
扩展你的模型ResponseModel
是结果回调参数的结果对象类型。 如果你想解码数组,你只需对 [ResponseModel]
类型执行方法。error
指示请求失败的原因,如果请求成功,则为 nil。 它包括 EntityMaping
错误、url 准备错误等等。 如果收到来自服务器的响应,无论请求成功完成还是失败,response 参数都包含该信息。response
提供包含 HTTPURLResponse 对象和服务器返回数据的元组。URLSession
委托队列上执行。class func getRequest(for modelId: String, success: @escaping ((Model?) ->()), failure: (() ->())? = nil) throws {
let _ = ResponseModel.get(path: PathPattern.model.patternToPath(with: ["modelId":modelId])) { (response, result, error) in
guard response?.urlResponse?.statusCode == 200 && error == nil else {
failure?()
return
}
success(try result?.serialized(SLazeKit.newBackgroundContext()) as? Model)
}
}
如果 ResponseModel
符合 EntityMapping
协议,它将与 CoreData 同步。 这意味着如果模型对象已存在,它将更新它或创建新实例并使用响应数据填充 NSManagedObject
。 你可以通过以下方式序列化你的响应以在给定上下文中接收 CoreData
对象
try result?.serialized(NSManagedObjectContext) as? Model)
调用此方法简单查询之前通过给定对象 id 同步的 NSManagedObject
。
模型示例
简单 Object.swift 高级 Model.swift
如果需要任何其他配置,你可以使用 Laze
//Laze<C: LazeConfiguration, D: Decodable>
Laze<Default, ResponseModel>.get( // Default configuration, result in ResponseModel model
SLazeKit<Default>.get( // Default configuration, no result model
ResponseModel.get( // Default configuration, result in ResponseModel model
CocoaPods
将行 pod "SLazeKit"
添加到你的 Podfile
Carthage
将行 github "shial4/SLazeKit"
添加到你的 Cartfile
手动
克隆 repo 并将文件夹 SLazeKit
拖到你的 Xcode 项目中。
Swift Package Manager
将行 .package(url: "https://github.com/shial4/SLazeKit.git", from: "0.2.1"),
添加到你的 Package.swift
iOS 项目中的 Swift Package Manager: 此项目演示了一种使用 Swift Package Manager (SPM) 管理 iOS 项目依赖项的工作方法。
为了获得积极的体验,你应该首先配置 SLazeKit
。
默认配置中的 SLazeKit 使用符合 LazeConfiguration
协议的 Default
类。 我建议扩展 Default
配置。 此外,如果你的项目中有多个 API。 你可以通过创建你自己的符合 LazeConfiguration
协议的对象来创建任意数量的配置方案。
import SLazeKit
extension Default {
//Provide base path for your API requests.
open class var basePath: String? { return "www.yourdomain.com" }
//Additional you can set port for your requests.
open class var basePort: Int? { return 8040 }
//You can provide your own instance of JSONDecoder.
open class var decoder: JSONDecoder { return JSONDecoder() }
//You can customize instance of URLSession in here.
open class var urlSession: URLSession { return URLSession.shared }
//If you feel like to set header dor requests do it in here.
open class func setup(_ request: URLRequest) -> URLRequest {
var request: URLRequest = request
request.setValue("Your token", forHTTPHeaderField: "X-Access-Token")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
return request
}
//If you feel like to monitor response. You can do it in here.
open class func handle(_ response: HTTPURLResponse?) {
if response?.statusCode == 401 {
Client.logout()
}
}
/// Method dedicated to be use for synchronize object into persisten store
///
/// - Parameter obj: encoded object
/// - Throws: error occured during the process
open static func synchronize(_ obj: Any) {}
}
欢迎为本项目做出贡献! :)
只需在 GitHub 上创建一个 issue。
本项目已在 MIT 许可下发布。