如何将`ParameterEncoding`与`URLRequestConvertible`一起使用?

时间:2016-09-09 18:03:43

标签: alamofire swift3

我正在将我的代码迁移到Swift 3并将Alamofire更新为swift 3分支。 在那里,建议的处理参数编码的方法是使用一个新的ParameterEncoding符合结构,例如URLEncoding,它具有encode方法。

问题是这个方法现在抛出,这是有道理的,但是URLRequestConvertible协议仍然期望一个urlRequest属性返回构造的请求,所以我们可以&# 39;只需调用encode并返回结果,也不返回零。

如果路由器发生故障,建议的处理方式是什么?

1 个答案:

答案 0 :(得分:0)

Alamofire如何在内部处理它:

open func request(
    _ urlString: URLStringConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: [String: String]? = nil)
    -> DataRequest
{
    let urlRequest = URLRequest(urlString: urlString, method: method, headers: headers)

    do {
        let encodedURLRequest = try encoding.encode(urlRequest, with: parameters)
        return request(resource: encodedURLRequest)
    } catch {
        let request = self.request(resource: urlRequest)
        request.delegate.error = error
        return request
    }
}

基本上,它使用没有参数的请求。我不知道在您自己的实施中可以使用多远(或How to migrate Alamofire router class to Swift 3?的OP)。 如果不可能的话,我建议向Alamofire提出问题。新的ParameterEncoding实际上是两天(PR 1465),仍处于4.0.0测试周期。 在任何情况下,如果您设置自己的URLEncoding.encode(),则使用URLRequest很少会失败,因为唯一的错误是当请求没有提供URL时。

编辑:在这里,4.0.0发布,问题已得到解决! (PR 1505)。 URLRequestConvertible已对其进行了其他更改,但在迁移指南和自述文件中都有所有更改。