因为很快的原因,我似乎不能做这个简单的事情。这是采取数组或字符串,并把它放入firebase。(没有一个for循环)。我怎么做呢?
代码(错误):
// Cannot convert value of type '[String]' to expected argument type '[AnyHashable : Any]
var list = [String]()
list.append("TestString")
Database.database().reference().child("TestNode").updateChildValues(list) { (error, value) in
if error != nil {
return
} else {
}
}
字符串
代码(崩溃):
// Could not cast value of type 'Swift.Array<Swift.String>' (0x103f941b8) to 'Swift.AnyHashable' (0x103f548b0).
Database.database().reference().child("TestNode").updateChildValues([list as! AnyHashable: "nil"]) { (error, value) in
if error != nil {
return
} else {
}
}
型
3条答案
按热度按时间41ik7eoe1#
你的代码很接近,但让我们看看它在做什么。Firebase结构总是键:值对(例如,想想字典),所以这是有效的
字符串
虽然这不是
型
正如你所看到的,TestNode不是一个键:值对。
型
也是无效的,因为它现在是一个字符串数组-而不是键:值对。
这是一个有效的键:值对
型
因为 user_0 是键,name:“Leeroy” 是值,这也是一个键:值对。
你的代码不工作的原因是它试图将单个字符串 TestNode 写入Firebase,而不是以键:值格式。所以通过使数据成为键:值对(字典)而不是单个字符串(在你的情况下,是存储在数组中的单个字符串)来修复它。
型
这将导致以下结构被写入Firebase
型
Firebase需要知道你想把数据存储在哪里;当你告诉它在 TestNode/food 节点中添加或更新 pizza 值时,它会知道你想把数据写在哪里。
字符串数组不应该直接写入Firebase,因为它只是一个数组。数组的每个元素通常与一个节点(键)相关联,使每个元素成为一个键:值对。这是一种很好的形式,使您的Firebase可查询,更易于维护。
虽然在Firebase中使用数组可能很诱人(因为它可以做到)-不要。这不是一个在NoSQL数据库中工作良好的概念。请参阅不要使用数组以及这篇文章,也许还有这篇文章以获得进一步的阅读。
i2byvkas2#
Firebase支持键值对,所以如果你想存储一个数组,你需要给这个数组分配一个键,比如
字符串
问候
czq61nw13#
请检查此代码,它将是工作
字符串
作为Firebase文档检查Firebase中的更新字段