我正在将我的代码迁移到Swift 3并将Alamofire更新为swift 3分支。
在那里,建议的处理参数编码的方法是使用一个新的ParameterEncoding
符合结构,例如URLEncoding
,它具有encode
方法。
问题是这个方法现在抛出,这是有道理的,但是URLRequestConvertible
协议仍然期望一个urlRequest
属性返回构造的请求,所以我们可以&# 39;只需调用encode
并返回结果,也不返回零。
如果路由器发生故障,建议的处理方式是什么?
答案 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
已对其进行了其他更改,但在迁移指南和自述文件中都有所有更改。