Массив объектов словаря изменяется после отправки в Firebase облачной функции в Swift? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть массив объектов словаря с именем assets, при распечатке в Swift он показывает:

[
    ["assetType": "video", "assetPath": "some_path"],
    ["assetType": "image", "assetPath": "some_other_path"]
]

, что идеально, однако, после того, как я отправил его в свою облачную функцию Firebase и напечаталв облачной функции 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 как только он называется

1 Ответ

0 голосов
/ 28 мая 2018

Обновлено: 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"
    }
]

--------------------------- Alamofire way --------------------------

Прочитайте документацию здесь , видимо, я тоже должен добавить encoding параметров:

Alamofire.request(
    "https://...",
    method: .post,
    parameters: [
        "assets": assets
    ],
    encoding: JSONSerialization(options: [])
)

И эта проблема будет решена.

...