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

时间:2017-03-22 18:28:11

标签: ios swift alamofire completionhandler

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

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

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

myFunc(){(_ _,错误)in}

如何才能获得我想要的块?像Alamofire一样做他的回答?

1 个答案:

答案 0 :(得分:1)

您可以将BaseService班级的completionHandler划分为每个服务功能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





                            })