首页 文章

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

提问于
浏览
0

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

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

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

myFunc(){(,error)in}

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

1 回答

  • 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
    
    
    
    
    
                                })
    

相关问题