Eatr 0.1.7

Eatr 0.1.7

nayanda1 维护。



Eatr 0.1.7

  • nayanda1

iOSEatr

iOS(Swift)中带有构建器的 RESTful 网络服务消费者


更新日志

查看更新日志请访问 此处


特性


需求

  • Swift 4.2 或更高版本

安装

CocoaPods

在您的 Podfile 中添加以下内容

pod 'Eatr', '~> 0.1.6'

手动

  1. 克隆此仓库。
  2. 已添加到项目中。
  3. 恭喜!

使用示例

同步

使用 HttpRequestBuilder 构建 Object,然后执行。

//HttpGet
let getResponse : Response? = EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
    .addHeader(withKey : "SOME-HEADER", andValue : "header_value")
    .addParam(withKey : "param_key", andValue : "param_value")
    .awaitExecute()

if let response : EatrResponse = getResponse {
    let rawResponse : URLResponse? = response.rawResponse
    let isSuccess : Bool = response.isSuccess
    let isError : Bool = response.isError
    let statusCode : Int? = response.statusCode
    let body : Data? = response.rawBody
    let strBody : String? = response.bodyAsString
    let jsonBody : [String : Any?] = response.bodyAsJson
    let arrJsonBody : [Any?] = response.bodyAsJsonArray
    let parsedBody : YourHandyJSONObj = response.parsedBody()
    let parsedArray : [YourHandyJSONObj?] = response.parsedArrayBody
}

//HttpPost with Json body
let postJsonResponse : Response? = EatrRequestBuilder.httpPost.set(url : "http://your.url.here")
    .addHeader(withKey : "SOME-HEADER", andValue : "header_value")
    .addParam(withKey : "param_key", andValue : "param_value")
    .set(jsonBody : jsonDictionary).awaitExecute()

您可以使用原始内容、表单数据、字符串、HandyJSON 对象或任何 JSON 对象作为请求体。

简单异步

与同步操作相同,但是您需要在执行方法中传递一个消费者函数。
请注意,如果达到超时,闭包内的响应将为 null。

//Basic
EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
    .addHeader(withKey : "SOME-HEADER", andValue : "header_value")
    .addParam(withKey : "param_key", andValue : "param_value")
    .asyncExecute(onFinished : { response : Response? in
        //YOUR CODE HERE
        // WILL BE EXECUTE AFTER REQUEST IS FINISHED
    })

高级异步/同步

与任何异步 HTTP 请求相同,但你可以设置单独的消费者。你可以设置 5 个闭包消费者。

  • onProgress - 对于每次进度都会运行,它会提供从 0.0f 到 1.0f 的进度。
    因为这个方法会定期调用,最好不要在这个方法中创建对象。
  • onBeforeSending,在发送前执行
  • onResponded,只有当你收到响应时才会执行
  • onTimeout,只有当你超时后没有收到响应时才会执行
  • onException,只有当你收到未处理的异常时才会执行
  • onFinished,所有请求完成后执行

您不必设置所有消费者。只需设置您需要的那个。

请注意,如果达到超时,闭包内的响应将为 null。

//with onFinished closure
EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
    .addHeader(withKey : "SOME-HEADER", andValue : "header_value")
    .addParam(withKey : "param_key", andValue : "param_value")
    .set(onTimeout : {
        //YOUR CODE HERE
    })
    .set(onBeforeSending : { (session : URLSession) -> URLSession in
        //YOUR CODE HERE
    })
    .set(onError : { error : Error in
        //YOUR CODE HERE
    })
    .set(onProgress : { progress : Float in
        //YOUR CODE HERE
    })
    .set(onResponded : { response : Response in
        //YOUR CODE HERE
    })
    .asyncExecute()

//you can even do it synchronously and all your closure will be executed synchronously
let response : Response? = EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
    .addHeader(withKey : "SOME-HEADER", andValue : "header_value")
    .addParam(withKey : "param_key", andValue : "param_value")
    .set(onTimeout : {
        //YOUR CODE HERE
    })
    .set(onBeforeSending : { (session : URLSession) -> URLSession in
        //YOUR CODE HERE
    })
    .set(onError : { error : Error in
        //YOUR CODE HERE
    })
    .set(onProgress : { progress : Float in
        //YOUR CODE HERE
    })
    .set(onResponded : { response : Response in
        //YOUR CODE HERE
    })
    .awaitExecute()

使用委托

如果更愿意使用委托,您可以使用EatrDelegate协议,其中包含以下可用方法

  • eatrOnBeforeSending(_ sessionToSend : URLSession) -> URLSession
  • eatrOnTimeout()
  • eatrOnError(_ error: Error)
  • eatrOnProgress(_ progress: Float)
  • eatrOnResponded(_ response: EatrResponse)
  • eatrOnFinished()

所有方法都是可选的,只需使用您需要的。

EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
    .addHeader(withKey : "SOME-HEADER", andValue : "header_value")
    .addParam(withKey : "param_key", andValue : "param_value")
    .set(delegate : self)
    .asyncExecute()

贡献

我们非常欢迎您为做出贡献,请联系我发送邮件到[email protected]或直接提交归档请求