斯威夫特& Firebase - 观察后调用一个函数

时间:2018-03-22 13:37:42

标签: ios swift uitableview firebase swift3

我正在编写聊天应用程序。我想在observe-function:

之后更新tableViewController

覆盖func viewWillAppear(_ animated:Bool){       super.viewWillAppear(动画)

  Api.Message.observeStaticUserDiscussion(toId: self.user!.id!) { (message, messageId, currentId) in
     if message.notViewed! && currentId != message.fromId {
        Api.Message.updateMessageStatus(withMessage: messageId, value: false)

     }

  }
  // THIS LINE
  self.delegate?.updateMenuMessage()

}

我的代码非常简单,我检查是否读取了消息,如果没有看到消息,我会更新每个消息的状态。

然后,我可以更新tableViewController(主页,显示所有用户的消息)。

如果我包含此行

self.delegate?.updateMenuMessage()

之后

Api.Message.updateMessageStatus(withMessage: messageId, value: false)

它正常工作,但tableView重新加载了很多次......

我希望有这样的代码:

  1. 观察是否未看到消息,并在需要时更新值
  2. 观察功能完成后,您现在可以重新加载tableView
  3. 这可能吗?

1 个答案:

答案 0 :(得分:1)

尝试这种方法。

添加观察者:

func getNewMessage(completion: @escaping ([String : AnyObject]) -> Void) {

    let messagesRef: DatabaseReference = ref.child("chat").child("messages")

    messagesRef.observe(.childAdded, with: { (snapshot) in

        guard let snapshotValue = snapshot.value as? [String: AnyObject] else {
            return
        }

        completion(snapshotValue)

    }, withCancel: nil)
}

用法:

getNewMessage { (message) in
    addNewMessageToArray(message)
    self.updateMenuMessage()
}