Alamofire,post 请求 [string:any] 的 HTTPheaders
Alamofire, HTTPheaders for post request [string:any]
我需要使用 alamofire 向我的服务器发送一个 post 请求,要发送的 header 之一不是字符串值,而是一个 Int
阅读 Alamofire 的文档看起来 HTTPHeaders 只是类型 [String: String]
有没有办法将 HTTPHeaders 自定义为 [String:Any]?
我在网上找不到太多适合我理解的内容。
谢谢
Alamofire 没有这样的方法,但你可以轻松做到
["hey": 1].mapValues { String(describing: [=13=]) }
returns [String: String]
如果你有很多地方使用它,你可以:
- 为
Dictionary
创建扩展
extension Dictionary where Key == String, Value == Any {
func toHTTPHeaders() -> HTTPHeaders {
HTTPHeaders(mapValues { String(describing: [=10=]) })
}
}
// Usage
AF.request(URL(fileURLWithPath: ""), headers: ["": 1].toHTTPHeaders())
- 为
HTTPHeaders
创建扩展
extension HTTPHeaders: ExpressibleByDictionaryLiteral {
public init(dictionaryLiteral elements: (String, Any)...) {
self.init()
elements.forEach { update(name: [=11=].0, value: String(describing: [=11=].1)) }
}
}
// usage
AF.request(URL(fileURLWithPath: ""), headers: HTTPHeaders(["": 1]))
- 为
Session
创建扩展
extension Session {
open func request(_ convertible: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: [String: Any],
interceptor: RequestInterceptor? = nil,
requestModifier: RequestModifier? = nil) -> DataRequest {
return request(convertible, method: method, parameters: parameters, encoding: encoding, headers: headers.mapValues { String(describing: [=12=]) }, interceptor: interceptor, requestModifier: requestModifier)
}
}
// Usage
AF.request(URL(fileURLWithPath: ""), headers: ["": 1])
Alamofire 中没有此类选项的原因是类型安全。当您使用 Any
时,您可以在那里传递任何值,因此出错的可能性要大得多。通过要求字符串库确保您自己转换所有需要的值。
我会选择第一个变体,因为当您阅读代码时会更清楚那里发生了什么
我需要使用 alamofire 向我的服务器发送一个 post 请求,要发送的 header 之一不是字符串值,而是一个 Int
阅读 Alamofire 的文档看起来 HTTPHeaders 只是类型 [String: String]
有没有办法将 HTTPHeaders 自定义为 [String:Any]?
我在网上找不到太多适合我理解的内容。
谢谢
Alamofire 没有这样的方法,但你可以轻松做到
["hey": 1].mapValues { String(describing: [=13=]) }
returns [String: String]
如果你有很多地方使用它,你可以:
- 为
Dictionary
创建扩展
extension Dictionary where Key == String, Value == Any {
func toHTTPHeaders() -> HTTPHeaders {
HTTPHeaders(mapValues { String(describing: [=10=]) })
}
}
// Usage
AF.request(URL(fileURLWithPath: ""), headers: ["": 1].toHTTPHeaders())
- 为
HTTPHeaders
创建扩展
extension HTTPHeaders: ExpressibleByDictionaryLiteral {
public init(dictionaryLiteral elements: (String, Any)...) {
self.init()
elements.forEach { update(name: [=11=].0, value: String(describing: [=11=].1)) }
}
}
// usage
AF.request(URL(fileURLWithPath: ""), headers: HTTPHeaders(["": 1]))
- 为
Session
创建扩展
extension Session {
open func request(_ convertible: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: [String: Any],
interceptor: RequestInterceptor? = nil,
requestModifier: RequestModifier? = nil) -> DataRequest {
return request(convertible, method: method, parameters: parameters, encoding: encoding, headers: headers.mapValues { String(describing: [=12=]) }, interceptor: interceptor, requestModifier: requestModifier)
}
}
// Usage
AF.request(URL(fileURLWithPath: ""), headers: ["": 1])
Alamofire 中没有此类选项的原因是类型安全。当您使用 Any
时,您可以在那里传递任何值,因此出错的可能性要大得多。通过要求字符串库确保您自己转换所有需要的值。
我会选择第一个变体,因为当您阅读代码时会更清楚那里发生了什么