我有一个名为assets
的字典对象数组,当用 Swift 打印出来时,它显示:
[
["assetType": "video", "assetPath": "some_path"],
["assetType": "image", "assetPath": "some_other_path"]
]
但是,在我将其发送到我的Firebase Cloud函数并将其打印到云函数中后,这是完美的,assets
变为:
[
{
"assetType": ["video", "image"],
"assetPath": ["some_path", "some_other_path"]
}
]
为什么会这样?我应该如何解决这个问题?
------------------------------更新------------------------------
我使用Alamofire
模块来执行http请求:
Alamofire.request(
"https://....",
method: .post,
parameters: [
"assets": assets
]
)
------------------------------更新 2------------------------------
我的云功能如下:
exports.testFunction = functions.https.onRequest((req, res) => {
const { assets } = req.body;
return res.status(200).send(assets)
})
一旦被调用,它就会立即发回assets
更新:执行此操作Alamofire
方法位于底部
我尝试了其他方法,只能回答问题的第二部分:我如何解决这个问题?显然,不使用Alamofire
可以解决问题,但我相信Alamofire
没有错,可能会缺少一些东西,我会挖掘更多,但现在,Alamofire
的替代方案是URLSession
:
let session = URLSession.shared
let url: URL = URL(string: "https://...")!
let request = NSMutableURLRequest(url: URL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
do {
request.httpBody = try JSONSerialization.data(
withJSONObject: [
"assets": assets
],
options: JSONSerialization.WritingOptions()
)
let task = session.dataTask(with: request as URLRequest) { (data, _, _) in
if let responseData = data {
print(String(data: responseData, encoding: .utf8)!)
}
}
task.resume()
} catch {
print(error)
}
它打印:
[
{
"assetType": "video",
"assetPath": "some_path"
},
{
"assetType": "image",
"assetPath": "some_other_path"
}
]
---------------------------阿拉莫火之路--------------------------
显然,阅读此处的文档,我也应该添加encoding
选项:
Alamofire.request(
"https://...",
method: .post,
parameters: [
"assets": assets
],
encoding: JSONSerialization(options: [])
)
这个问题将得到解决。