Alamofire 没有这样的方法,但你可以轻松做到
["hey": 1].mapValues { String(describing: $0) } 返回[String: String]
如果你有很多地方使用它,你可以:
- 为
Dictionary 创建扩展
extension Dictionary where Key == String, Value == Any {
func toHTTPHeaders() -> HTTPHeaders {
HTTPHeaders(mapValues { String(describing: $0) })
}
}
// Usage
AF.request(URL(fileURLWithPath: ""), headers: ["": 1].toHTTPHeaders())
- 为
HTTPHeaders 创建扩展名
extension HTTPHeaders: ExpressibleByDictionaryLiteral {
public init(dictionaryLiteral elements: (String, Any)...) {
self.init()
elements.forEach { update(name: $0.0, value: String(describing: $0.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: $0) }, interceptor: interceptor, requestModifier: requestModifier)
}
}
// Usage
AF.request(URL(fileURLWithPath: ""), headers: ["": 1])
Alamofire 中没有此类选项的原因是类型安全。当您使用Any 时,您可以在那里传递任何值,因此出错的可能性要高得多。通过要求字符串库确保您自己转换所有需要的值。
我会选择第一个变体,因为当您阅读代码时会更清楚地知道那里发生了一些事情