如何创建像 Alamofire Responses 这样的块响应?

Posted

技术标签:

【中文标题】如何创建像 Alamofire Responses 这样的块响应?【英文标题】:How to create a block response like Alamofire Responses? 【发布时间】:2017-08-15 01:20:20 【问题描述】:

这个问题可能很愚蠢,但我正在寻找一种方法来创建像 Alamofire 4.0 这样的可选响应(例如 responseJSON、responseData、responseString 等)。例如,在我的项目中,我有 BaseService 发出请求(使用 alamofire)然后处理响应(对于错误,如果有,它调用一个异常类,显示一条消息中断流)。因此,我有继承自 BaseService 的子类,并且我的方法具有完成块,它们从 BaseService 解析和传递任何数据(或错误,如果需要)。

然后,我的问题是:我的 BaseService 请求函数可能会返回(作为块)响应、json 或错误,例如:completionHandler(response,json, error) 或 completionHandler(nil, json, nil)

所以当我不需要响应或 json 时,只想验证错误是否不为零,我必须这样做:

myFunc() ( _ , _,error) in

如何才能只获得我想要的块?就像 Alamofire 对他的回应所做的那样?

【问题讨论】:

【参考方案1】:

您可以将您的completionHandler BaseService 类划分为每个服务功能到onSuccessonFail ...等

例子:

    func logInUser( _ userEmail : String, userPassword : String, onSuccess: @escaping (Any?)-> Void, onFail : @escaping (Error?) ->(Void))  

    let url : URLConvertible = urls.loginUser

    let parameters = ["email" : userEmail, "password" : userPassword]

    let header = ["Authorization" : APPSECRETKEY ]

    alamofireManager.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: header).responseJSON(completionHandler:  response in

        if response.result.value != nil && response.result.error == nil 

        onSuccess(response.result.value)

        
        else
        
          onFail(response.result.error)

        
    )


当你调用你的服务函数时:

    BaseService.sharedInstance.logInUser("email", userPassword: "password",

                            onSuccess:  responseValue in



                            ,

                            onFail:  error in





                            )

【讨论】:

嗨@Ayman 有一种方法可以直接在函数声明中使这个块可选?那么我可以仅在需要时调用“onSuccess”或“onFail”吗?

以上是关于如何创建像 Alamofire Responses 这样的块响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 关闭证书验证?

如何在 Alamofire 中将原始数据作为参数发布?

第一节:简单的请求(Requests)和响应(Responses)

我如何检查 Alamofire 我的请求已发送?

如何使用 Alamofire 解析 json 数据?

如何在alamofire中将参数作为字符串发送