将字典存储到 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>")
在 currentUserFirstName
和 currentUserLastName
中是从 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 不包含字符串,因此请优雅地处理错误。
我有一个 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>")
在 currentUserFirstName
和 currentUserLastName
中是从 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 不包含字符串,因此请优雅地处理错误。