SLazeKit
SLazeKit 是一个易于使用的 Swift restful 扩展和类的集合。不要花费数小时将您的 REST API 请求映射到模型和 CoreData 序列化。停止浪费时间!
SLazeKit 允许您
- 通过
Codable
协议映射您的模型 - 使用 SLazeCoreData 或任何其他扩展,将 API 响应序列化为 CoreData 模型
- 快速简单地将模型的类型扩展为
API
和CoreData
- 此请求将使用默认配置方案。
- 类型
ResponseModel
是用于回调参数的结果对象类型。如果您想解码数组,只需要简单地在对[ResponseModel]
类型执行方法。 error
表示请求失败的原因,如果请求成功则为 nil。它包括EntityMaping
错误、URL 准备错误等。无论服务器是否收到响应,成功或失败,响应参数都包含这些信息。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
手动
克隆仓库并将文件夹 SLazeKit
拖拽到您的 Xcode 项目中。
Swift Package Manager
将以下行添加到您的 Package.swift
:.package(url: "https://github.com/shial4/SLazeKit.git", from: "0.2.1"),
Swift Package Manager 在您的 iOS 项目中: 此项目展示了使用 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 上创建一个问题。
📝 许可证
该项目是在MIT许可证下发布的。