如何将 ParameterEncoding 与 URLRequestConvertible 一起使用?
How to use `ParameterEncoding` together with `URLRequestConvertible`?
我正在将我的代码迁移到 Swift 3 并将 Alamofire 更新到 swift 3 分支。
在那里,处理参数编码的建议方法是使用一种新的 ParameterEncoding
符合结构,例如 URLEncoding
,它有一个 encode
方法。
问题是这个方法现在 throws,这是有道理的,但是 URLRequestConvertible
协议仍然期望 urlRequest
属性 return 是构建的请求,所以我们不能只调用 encode
和 return 结果,也不能 return 为 nil。
如果路由器不会发生故障,建议的处理方法是什么?
这就是 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
}
}
基本上就是使用不带参数的request。我不知道它可以在您自己的实现(或 的 OP)中使用多远。
如果不可能,我建议向 Alamofire 提出问题。新的 ParameterEncoding
实际上已经存在两天 (PR 1465),并且仍处于 4.0.0 测试版周期。
在任何情况下,如果您设置自己的 URLRequest
,使用 URLEncoding.encode()
很少会失败,因为抛出的唯一错误是请求中没有提供 URL。
编辑:给您,4.0.0 已发布,问题已解决! (PR 1505)。 URLRequestConvertible
还有其他更改,但所有更改都在迁移指南和自述文件中。
我正在将我的代码迁移到 Swift 3 并将 Alamofire 更新到 swift 3 分支。
在那里,处理参数编码的建议方法是使用一种新的 ParameterEncoding
符合结构,例如 URLEncoding
,它有一个 encode
方法。
问题是这个方法现在 throws,这是有道理的,但是 URLRequestConvertible
协议仍然期望 urlRequest
属性 return 是构建的请求,所以我们不能只调用 encode
和 return 结果,也不能 return 为 nil。
如果路由器不会发生故障,建议的处理方法是什么?
这就是 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
}
}
基本上就是使用不带参数的request。我不知道它可以在您自己的实现(或 ParameterEncoding
实际上已经存在两天 (PR 1465),并且仍处于 4.0.0 测试版周期。
在任何情况下,如果您设置自己的 URLRequest
,使用 URLEncoding.encode()
很少会失败,因为抛出的唯一错误是请求中没有提供 URL。
编辑:给您,4.0.0 已发布,问题已解决! (PR 1505)。 URLRequestConvertible
还有其他更改,但所有更改都在迁移指南和自述文件中。