SLazeKit 0.3.0

SLazeKit 0.3.0

Szymon Lorenz 维护。



SLazeKit 0.3.0

SLazeKit

Language License CocoaPods Carthage

SLazeKit 是一个易于使用的 Swift restful 扩展和类的集合。不要花费数小时将您的 REST API 请求映射到模型和 CoreData 序列化。停止浪费时间!

SLazeKit 允许您

  • 通过 Codable 协议映射您的模型
  • 使用 SLazeCoreData 或任何其他扩展,将 API 响应序列化为 CoreData 模型
  • 快速简单地将模型的类型扩展为 APICoreData

  • 此请求将使用默认配置方案。
  • 类型 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项目依赖项的工作方法。

如何使用 SPM v4 管理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许可证下发布的。