Не удалось преобразовать код базы данных в реальном времени в код Firestore - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь настроить базу данных для базы данных firestore, но не могу этого сделать, сталкиваюсь с несколькими ошибками и не получаю какого-либо конкретного решения для этого, я использую swift для ios, в основном это приложение для чата, которое следует изучебник CodeLab, вот ссылка на тот же учебник! Этот учебник основан на базе данных Firebase Realtime, и мое требование - база данных Firestore,

Заранее спасибо за руководство

Что я пытался преобразовать в базу данных Firestore

var messages: [DocumentSnapshot]! = []
 fileprivate var _refHandle: CollectionReference!
 var ref = Firestore.firestore().collection("messages")

  func configureDatabase() {
    //ref = Firestore.firestore()    // Listen for new messages in the Firebase database
    _refHandle = self.ref.addSnapshotListener{ querySnapshot, error in
        if let documents = querySnapshot?.documents {
            var messages = [DocumentSnapshot]()
            for document in documents {
                let message = messages(snapshot: document)
                message.append(message)
                message.clientTable.insertRows(at: [IndexPath(row: message.messages.count-1, section: 0)], with: .automatic)

            }
           // completion(messages)
        }
        } as! CollectionReference


  }

Код RealtimeDatabase

var ref: DatabaseReference!
  var messages: [DataSnapshot]! = []
  fileprivate var _refHandle: DatabaseHandle?

  deinit {
    if let refHandle = _refHandle {
        self.ref.removeObserver(withHandle: _refHandle)
    }
}

func configureDatabase() {
    ref = Database.database().reference()
    // Listen for new messages in the Firebase database
    _refHandle = self.ref.child("messages").observe(.childAdded, with: { [weak self] (snapshot) -> Void in
      guard let strongSelf = self else { return }
      strongSelf.messages.append(snapshot)
      strongSelf.clientTable.insertRows(at: [IndexPath(row: strongSelf.messages.count-1, section: 0)], with: .automatic)
    })
  }

Ошибка в коде пожарного депо

Cannot call value of non-function type '[DocumentSnapshot]'" 

в

let message = messages(snapshot: document)

1 Ответ

1 голос
/ 01 ноября 2019

Это может или не может помочь, но вот функция, которая читает все сообщения и печатает идентификатор сообщения (documentId) и текст сообщения на консоль. Предположим, у нас есть класс var messsagesArray, настроенный для хранения каждого сообщения, и класс, который содержит documentId и текст сообщения.

Предположим, эта структура

messages //the collection
   msg_id_0 //the document id
      msgText "Hello"
   msg_id_1
      msgText:"World"

и код для чтения и печатисообщения

func readAllMessages() {
    let messagesCollection = self.db.collection("messages")
    messagesCollection.getDocuments(completion: { snapshot, err in

        if let err = err {
            print(err.localizedDescription)
            return
        }

        for doc in snapshot!.documents {
            let key = doc.documentID
            let msg = doc.get("msg") as! String
            let aMsg = MessageClass(aKey: key, msgText: msg)

            self.messagesArray.append(aMsg)
        }

        for msg in self.messagesArray { //output the read messages to console
            print(msg.key, msg.msgText)
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...