首页 > 解决方案 > Swift / firebase / firebase中的儿童数量增加

问题描述

我的数据库截图 在此处输入图像描述

我想限制用户最多只能输入 5 条短信。因此,我想添加带有消息和日期值的“1”、“2”、“3”、“4”、“5”有序子项。实际上我可以通过添加以下代码通过某种操作来实现它

        if message0 > 1 && message0 < 7 {
        message0 = message0 - 1
    }

但是,如果我跳过这部分,那么当系统将数据记录到 Firebase 中时,它总是会跳过“2”子级,然后以正常的升序方式计算它们。

数据库截图

在此处输入图像描述

我把我的完整代码放在下面。它有效,但我觉得上面的操作有点奇怪,以后可能会带来麻烦。如果您知道我做错了什么,并且有一些好的建议可以正确地以升序方式添加孩子的数量,我将不胜感激。还想添加检查现有子代的代码,以避免覆盖相同的子代号。但不知道该怎么做。无论如何,提前感谢您的任何建议。

  func sendInputTextToFirebase() { 
        var message0 = MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).observe(.childAdded) { (snapshot) in
            var a = [String]()
            a.append(snapshot.key)
            print(a)
            let b = a.count
            print(b)
                }

    //TODO: make child counting into dbase upto 5 in more elegant way
    if message0 > 1 && message0 < 7 {
        message0 = message0 - 1
    }

    if message0 < 6 {
    let messageString = String(message0)
    let picker = tergetDateTF.text
    let messageT = [
                "message": messageTV.text! as String,
                "Date": picker]
    MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).child(messageString).setValue(messageT)

        } else {

        print("limit exceeded")
        }}}

标签: swiftfirebasefirebase-realtime-database

解决方案


正如评论中的用户所建议的,您可以使用 autoId 添加您的消息,如下所示:

MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).childByAutoId().setValue(messageT)

至于消息的计数,您可以执行以下操作:

首先将下一个 var 设为全局变量

func sendInputTextToFirebase() { 
    var message0 = MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).observe(.childAdded) { (snapshot) in
        a.append(snapshot.key)
        print(a)
if(a.count < 6) {
    let messageString = String(message0)
    let picker = tergetDateTF.text
    let messageT = [
            "message": messageTV.text! as String,
            "Date": picker]
MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).childByAutoId().setValue(messageT)
} else {
   print("limit exceeded")
}

推荐阅读