Swift & Firestore - добавление словаря во вложенный массив с помощью .arrayUnion () - PullRequest
0 голосов
/ 14 марта 2020

Я создаю приложение чата, в котором пользователь может запускать несколько чатов с другим человеком (как и остальные приложения чата). Я использую Swift с Cloud Firestore .

Моя база данных выглядит следующим образом:

Chat collection: [
     "chatMember": ["member1", "member2"],
     "createdAt" : Date().timeIntervalSince1970,
     "meesages" : []
]

В одной комнате чата будет массив 'messages', и он будет иметь message словари aka объект.

Ниже кода я пытаюсь добавить словарь сообщений в массив сообщений .

В Firebase do c вводится .arrayUnion() <<a href="https://firebase.google.com/docs/firestore/manage-data/add-data?authuser=0#update_elements_in_an_array" rel="nofollow noreferrer"> LINK к документу>. Но из-за этого возникает ошибка:

" Контекстный тип '[Любой]' не может использоваться с литералом словаря "

@IBAction func sendBtnPressed(_ sender: UIButton) {

        if let messageBody = messageField.text, let messageSender = Auth.auth().currentUser?.email {

            db.collection("collectionName").document("docName").updateData([

//              FieldValue.arrayUnion() does not work for this case.

                K.FB.messages: FieldValue.arrayUnion([
                    "sender": messageSender,
                    "content": messageBody,
                    "createdAt": Date().timeIntervalSince1970
                ])
            ]) { ... closure }
        }
    }   

Я не могу найти ни одного информация, конкретно связанная с добавлением словаря Swift во вложенный массив в Cloud Firestore.

Я нашел очень похожий случай на YouTube <<a href="https://youtu.be/LKAXg2drQJQ" rel="nofollow noreferrer">https://youtu.be/LKAXg2drQJQ>, но это сделано с Angular, в котором используется объект с { ...curly bracket}. FieldValue.arrayUnion(), кажется, работает на других языках, но не на Swift.

Было бы здорово, если бы кто-то, кто решил эту проблему, помог мне.

Заранее спасибо.

1 Ответ

1 голос
/ 14 марта 2020

Итак, в основном вы говорите с этим кодом:

K.FB.messages: FieldValue.arrayUnion([
    "sender": messageSender,
    "content": messageBody,
    "createdAt": Date().timeIntervalSince1970
])

заключается в том, что вы хотите добавить словарь к массиву с именем, которое находится в K.FB.messages константа. Но вы не хотите этого делать, и это даже невозможно. Вы хотите добавить массив словарей к массиву . Это означает, что вы должны заключить свой словарь в квадратные скобки. Как показано ниже:

K.FB.messages: FieldValue.arrayUnion([[
    "sender": messageSender,
    "content": messageBody,
    "createdAt": Date().timeIntervalSince1970
]])

Я надеюсь, вы видите разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...