Анализ данных объекта FIRHTTPSCallableResult из облачной функции Firebase с помощью Swift - PullRequest
0 голосов
/ 05 июля 2018

У меня есть эта простая облачная функция:

export const getTasks = functions.https.onRequest((request, response) => {
    admin.firestore().collection('tasks').get()
    .then(snapshot => {
        const results = []
        snapshot.forEach(task => {
            const data = task.data()
            results.push(data)
        })
        response.send(results)
    })
    .catch(error => {
        console.log(error)
        response.status(500).send(error)
    })
});

При вызове https из браузера выдается правильный json:

[
{
title: "A title",
dueDate: "2018-07-03T18:33:27.537Z",
isComplete: true,
type: "task",
date: "2018-07-02T18:33:27.537Z"
},
{
type: "task",
date: "2018-07-02T18:36:25.506Z",
title: "Wowo",
dueDate: "2018-07-02T21:59:59.000Z",
isComplete: true
},
{
title: "Abc",
dueDate: "2018-07-04T18:31:58.050Z",
isComplete: false,
type: "task",
date: "2018-07-02T18:31:58.050Z"
}
]

Но когда я пытаюсь получить данные от клиента iOS через функцию, я получаю FIRHTTPSCallableResult объект и нулевой объект:

functions.httpsCallable("getTasks").call() { (result, error) in
            if let error = error as NSError? {
                if error.domain == FunctionsErrorDomain {
                    //...
                }
                // ...
            }

            print( "result -> \(type(of: result))")
            print( "result?.data -> \(type(of: result?.data))")

Вход:

result -> Optional<FIRHTTPSCallableResult>

result?.data -> Optional<Any>

Я пытался использовать разбор JSON, но он не работает. Как я могу получить JSON?

Спасибо

1 Ответ

0 голосов
/ 05 июля 2018

Документация API для поля data гласит:

Данные представлены в виде нативных объектов. Например, если ваш Триггер вернул массив, этот объект был бы NSArray. Если твой Триггер возвратил объект JavaScript с ключами и значениями, этот объект будет NSDictionary.

Поскольку вы отправляете массив объектов из своей функции, вы должны рассматривать содержимое data как NSArray из NSDictionary объектов.

...