Alamofire自定义响应从Alamofire v1.3迁移到3.0(以及Swift 2语法)

时间:2015-11-17 15:17:27

标签: swift2 alamofire

我正在将一个项目从Swift 1.1转换为使用Alamofire 1.3的Swift 2.0。 因为这个版本的Alamofire与Swift 2.0不兼容,所以我切换到最后一个版本的Alamofire(3.1.x)。

然而,这破坏了代码,我现在收到错误消息

"无法调用非功能类型的值' NSHTTPURLResponse?'""

这是由于我的扩展创建了一个自定义" responseShop" Alamofire.Request。

如何将此Alamofire.Request扩展程序正确转换为Alamofire 3.x / Swift 2.0语法?

extension Alamofire.Request {
    func responseShop(options: NSJSONReadingOptions = .AllowFragments, var errorHandler:ProtocolWebServiceErrorHandler?, completionHandler: (ShopCallResult?, WebServiceErrorCode) -> Void ) -> Self {
        objc_sync_enter(communicationLockObj)
        return response(serializer: Request.JSONResponseSerializer(options: options), completionHandler: {
            (request, response, JSON, error) in
            log.verbose("\(JSON)")
            //network error?
            if let error = error {
                //is it cancelled?
                if error.code == -999 {
                    dispatch_async(dispatch_get_main_queue()) {
                        //call handler with cancelled code
                        completionHandler(nil, WebServiceErrorCode.requestCancelled)
                    }
                    objc_sync_exit(communicationLockObj)
                    return
                }

                dispatch_async(dispatch_get_main_queue()) {
                    errorHandler?.handleWebServiceError(WebServiceErrorCode.connectError, errorText : error.localizedDescription, request: request, json: JSON)
                    //call and supply org error
                    completionHandler(nil, WebServiceErrorCode.connectError)
                }
                objc_sync_exit(communicationLockObj)
                return
            }
            if JSON == nil {
                dispatch_async(dispatch_get_main_queue()) {
                    errorHandler?.handleWebServiceError(WebServiceErrorCode.jsonNil, errorText: nil, request: request, json: JSON)
                    //call and supply org error
                    completionHandler(nil, WebServiceErrorCode.jsonNil)
                }
                objc_sync_exit(communicationLockObj)
                return
            }
            //api return error?
            let callResult = ShopCallResult(json: JSON!)
            if callResult.statusCode.failed {
                dispatch_async(dispatch_get_main_queue()) {
                    errorHandler?.handleWebServiceError(callResult.statusCode, errorText: callResult.statusCode.localizedText, request: request, json: JSON)
                    completionHandler(callResult, callResult.statusCode)
                }
                objc_sync_exit(communicationLockObj)
                return
            }
            //no error
            dispatch_async(dispatch_get_main_queue()) {
                completionHandler(callResult, WebServiceErrorCode.OK)
            }
            objc_sync_exit(communicationLockObj)
        })
        return self
    }
}

1 个答案:

答案 0 :(得分:1)

根据@ProblemSolver的反馈我设法转换代码,现在它看起来像这样:

null