Alamofire - 从 Swift 2 转换为 Swift 3 时出错

Posted

技术标签:

【中文标题】Alamofire - 从 Swift 2 转换为 Swift 3 时出错【英文标题】:Alamofire - error converting from Swift 2 to swift 3 【发布时间】:2017-07-19 07:39:53 【问题描述】:

我正在将我的项目从 Swift 2.3 转换为 Swift 3.0。我们正在使用 Alamofire pod 进行联网。现在我遇到了NSError 的问题。

当我们写error: responseObj.result.error 时,Swift 3 不接受这个。帮我解决这个问题。

检查我的代码:

static func getDataFromAPI(parameters : [String : AnyObject], successCallBack : @escaping APISuccessCallBack, failureCallBack : @escaping APIFailureCallBack) 

        client.makePOSTRequest(service: Constants.API_BASE_URL, parameters: parameters)  (statusCode, response, error) -> () in
            if statusCode == MobomoAPIClient.HTTPStatusCode.Success 
                successCallBack(response)
            
            else 

                failureCallBack(client.responseErrorMessage(statusCode: statusCode, response: response, error: error))
            
        
    


typealias APIClientResponseCallBack = (_ statusCode: Int?, _ response : AnyObject?, _ error : NSError?) -> ()

`self.alamoFireManager!.request(urlString, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
            .responseJSON  (responseObj) -> Void in
                responseCallBack(statusCode: responseObj.response?.statusCode, response: responseObj.result.value as AnyObject, error: responseObj.result.error)
        `

【问题讨论】:

【参考方案1】:

您应该将回调的NSError? 更改为Error? 并将failureCallBack 的错误转换为Error

typealias APIClientResponseCallBack = (_ statusCode: Int?, _ response : AnyObject?, _ error : Error?) -> ()

failureCallBack(client.responseErrorMessage(statusCode: statusCode, response: response, error: error as Error))

【讨论】:

failureCallBack(client.responseErrorMessage(statusCode: statusCode, response: response, error: error)) 中的任何更改,因为当我们更改 typealias APIClientResponseCallBack 然后在 failureCallBack error: error 中发生错误跨度> 无法使用类型为“(statusCode:Int?,响应:AnyObject?,错误:错误?)”的参数列表调用“responseCallBack”,面临此问题

以上是关于Alamofire - 从 Swift 2 转换为 Swift 3 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 数据从 alamofire 转换为 swift 对象

转换为 swift 2.0 时,构建的 Alamofire 3 失败

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

在 Swift 中将数组转换为 Alamofire 参数

Alamofire 的 Swift 扩展方法返回 SwiftyJSON 结果

为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?