将字典存储到 Firebase 中?

Storing dictionaries into Firebase?

我有一个 Firebase 实例,我想在其中存储要存储到 Firebase 中的值字典。我查看了文档 https://www.firebase.com/docs/ios/guide/saving-data.html 作为参考,但似乎无法使其正常工作。以下是我的尝试:

    //Declared above are the currentUser values as so:
    var currentUserFirstName: String!
    var currentUserLastName: String!
    var currentUserObjectID: String!

    var attendeesArray = ["objectID": currentUserObjectID, "name": currentUserFirstName + " " + currentUserLastName]
    var eventRefChild = EventReference.childByAutoId()
    eventRefChild.setValue([
        "eventName":eventName.text,
        "attendees": attendeesArray,
        "eventCreator": currentUserFirstName 
        ])

但我一直收到错误消息:Could not find an overload for '+' that accepts the supplied arguments 当我尝试执行 eventRefChild.setValue([... 时,老实说,我不太确定为什么会遇到此问题。任何帮助将不胜感激!

编辑:变量 EventReference 分配如下:EventReference = Firebase(url:"<Insert Firebase URL>")

currentUserFirstNamecurrentUserLastName 中是从 Facebook 中获取的个人名字和姓氏,因此看起来分别类似于 Bob Smith

你的代码没有问题。问题是正在加载到

中的值
var currentUserFirstName: String!
var currentUserLastName: String!

作为测试,我使用以下代码创建了一个示例项目,它是您发布的代码的副本,但将普通字符串加载到 var 中:

    var myRootRef = Firebase(url:"https://myproject.firebaseIO.com/")

    var currentUserFirstName = "Test"
    var currentUserLastName = "User"
    var currentUserObjectID = "object ID"

    var attendeesArray = ["objectID": currentUserObjectID, "name": currentUserFirstName + " " + currentUserLastName]
    var eventRefChild = myRootRef.childByAutoId()
    eventRefChild.setValue([
        "eventName": "eventName",
        "attendees": attendeesArray
        ])

项目正确编译和运行,预期数据已写入 Firebase。请注意,eventName.text 也被替换为字符串,但这并不影响答案。

调查需要转向 var 中加载的内容,答案是其中一个 var,currentUserFirstName 或 currentUserLastName 正在加载一个 OBJECT (class),而不是一个字符串。

附带说明一下,为什么将 var 声明为隐式展开的可选值(!)

编辑:添加额外的信息来处理选项

if let actualString = currentUserFirstName {
    println(actualString) //proceed working with the the optional string
}
else {
    return // something bad happened! currentUserFirstName does not contain a string
}

为防止可选值不包含任何值时代码出错,请将上述代码直接添加到代码的串联行上方。这里发生的是我们将 currentUserFirstName(可选变量)中的字符串分配给实际字符串(标准的非可选变量)。

如果表达式的计算结果为真,那么我们可以继续计算 currentUserFirstName。

如果为 false,则 currentUserFirstName 不包含字符串,因此请优雅地处理错误。