ios - 如何使用结构更新 Firebase

标签 ios swift firebase firebase-realtime-database

我有一个结构 EventDate 并且正在尝试更新 Firebase 中的引用。

struct EventDate {

    var club: String = ""
    var date: String = ""
    var eventText: String = ""
    var free: String = ""
    var monthYear: String = ""
}

我的更新函数抛出 lldb。我猜是因为 keys 不是 Strings(?)

func updateEvent(_ backendlessUserObjectID: String, event: EventDate) {

    let reference = firebase.child("eventDates").child(backendlessUserObjectID).child(event.date)
    reference.setValue(event) { (error, ref) -> Void in
        if error != nil {
            print("\(error)")
        }
    } // lldb here
}

如果我将函数更改为以下内容,一切都很好(因为 KeysValues 现在是字符串?)

func updateEvent(_ backendlessUserObjectID: String, event: EventDate) {

    let item: NSMutableDictionary = ["club" : event.club,
                                     "date" : event.date,
                                     "eventText" : event.eventText,
                                     "free" : event.free,
                                     "monthYear" : event.monthYear]

    let reference = firebase.child("eventDates").child(backendlessUserObjectID).child(event.date)
    reference.setValue(item) { (error, ref) -> Void in
        if error != nil {
            print("\(error)")
        }
    }
}

我收到 lldb 是因为我模型中的 keys 不是字符串吗?或者我遗漏了什么,如何在不创建 NSMutableDictionary 的情况下使用我的模型将值保存到我的 Firebase 中?非常感谢您的帮助。

PS: print(event.date) = 201610120200000000 -> .child 的期望值

最佳答案

Firebase 数据以 JSON 格式存在,可以将其视为键值对。键必须是字符串,值可以是 Dravidians 答案中提到的任何数据类型(这是一个正确的答案,应该被接受)。我想添加一些可能也有帮助的额外评论。

有时您想要在代码中使用一个结构,而该结构不能直接写入 Firebase - 您需要某种方法将数据从结构中提取到 Firebase 喜欢的东西 - 这是一个字典。

这是一个例子(Swift 3,Firebase 2.x)

struct EventDate {
     var club: String = ""
     var date: String = ""
     var eventText: String = ""
     var free: String = ""
     var monthYear: String = ""

     func getDict() -> [String:String] {
          let dict = ["club": self.club,
                      "date": self.date,
                      "eventText": self.eventText,
                      "free": self.free,
                      "monthYear": self.monthYear
                      ]

           return dict
     }
}


 var event = EventDate()
 event.club = "Wimbledon"
 event.date = "20161023"
 event.eventText = "Special Tennis Event"
 event.free = "Free"
 event.monthYear = "10/2016"

 let ref = self.myRootRef.child(byAppendingPath: "events")!
 let eventRef = ref.childByAutoId() //Firebase 2.x

 eventRef?.setValue( event.getDict() )

这导致一个节点被写入 Firebase,如下所示

"events" : {
    "-KUli8oiM_KKw8GZ0MMm" : {
      "club" : "Wimbeldon",
      "date" : "20161023",
      "eventText" : "Special Tennis Event",
      "free" : "Free",
      "monthYear" : "10/2016"
    }
 }

关于ios - 如何使用结构更新 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199216/

相关文章:

ios - 裁剪 UIImage - 更改背景颜色

ios - CoreBluetooth [警告] 未知错误 : 2

ios - UIPopoverController presentPopoverFromRect 显示不正确

ios - 自定义 UIBarButtonItem 保持图像的纵横比但间隔按钮

ios - 如何快速读取文档目录中的 json 文件?

ios - UIVisualEffect 没有显示在 UIView 上

swift - 我的解决方案对问题是否正确?成员构造器和自定义构造器

Swift Firebase 如何停止进程?

javascript - 客户端 JavaScript 中多个 Firebase 连接的资源限制

javascript - 向公众公开 Firebase apiKey 是否安全?