愿这个问题变得愚蠢,但我正在寻找一种方法来创建像Alamofire 4.0这样的可选响应(例如,responseJSON,responseData,responseString等)。例如,在我的项目中,我有BaseService来发出请求(使用alamofire)然后处理响应(对于erros,如果有,则调用异常类,显示消息中断流)。所以,我有从BaseService继承的子类,并且我的方法有完成块,它们从BaseService解析并传递任何数据(或者如果需要,则传递错误)。
Theen,我的问题是:我的BaseService请求函数可能返回(作为块)响应,json或错误,例如:completionHandler(响应,json,错误)或completionHandler(nil,json,nil)
因此,当我不需要响应或json时,只需要验证错误是否为零我必须这样做:
myFunc(){(_ , _,错误)in}
如何才能获得我想要的块?像Alamofire一样做他的回答?
答案 0 :(得分:1)
您可以将BaseService
班级的completionHandler划分为每个服务功能onSuccess
和onFail
...等等
示例:
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
})