在 Alamofire 中使用嵌套 key-value 设置 headers

Set headers with nested key-value in Alamofire

我正在尝试设置 Alamofire 4 请求的 headers,其中 headers 有一个键值是另一个 key-value 对。 swift 编译器对我的 header 变量很满意,但 Alamofire 不会接受它们。

这是我的:

 let subHeader = [
  "some-key": "some-value",
  "another-oey": "another-value"
  ]

let headers : [String: Any] = [
  "some-header-key": "some-header-value",
  "subdata": [subHeader]
  ]

// Upload data                  
Alamofire.upload(data,
   to: uploadurl,
   method: .put,
   headers: headers)
   .validate()
   .response { response in
   // Handle response
 }

如果你看一下 Alamofire's source,你会发现 HTTPHeaders 实际上是 [String: String]。基本上,Alamofire 期望您 [String: String]headers

你可以做的是用 NSJSONSerialization 将你的 subheader 转换成 String 然后传递给 Alamofire.

let dictData = try! JSONSerialization.data(withJSONObject: subheader)
let dictString = String(data: dictData, encoding: String.Encoding.utf8)!
print(dictString)
// Now use "dictString" instead of "subheader" in your "headers" dictionary

您可以根据需要进行错误处理,为了简单起见,我使用了 !s。