如何将数组放入Firebase Swift

2uluyalo  于 12个月前  发布在  Swift
关注(0)|答案(3)|浏览(107)

因为很快的原因,我似乎不能做这个简单的事情。这是采取数组或字符串,并把它放入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 {
        }
    }

41ik7eoe

41ik7eoe1#

你的代码很接近,但让我们看看它在做什么。Firebase结构总是键:值对(例如,想想字典),所以这是有效的

name: "Leeroy"

字符串
虽然这不是

"TestNode"


正如你所看到的,TestNode不是一个键:值对。

["TestNode", "Hello", "Test123"]


也是无效的,因为它现在是一个字符串数组-而不是键:值对。
这是一个有效的键:值对

user_0
  name: "Leeroy"


因为 user_0 是键,name:“Leeroy” 是值,这也是一个键:值对。
你的代码不工作的原因是它试图将单个字符串 TestNode 写入Firebase,而不是以键:值格式。所以通过使数据成为键:值对(字典)而不是单个字符串(在你的情况下,是存储在数组中的单个字符串)来修复它。

let dict = [
    "name": "Leeroy",
    "food": "pizza"]

let testRef = self.ref.child("TestNode")
testRef.updateChildValues(dict) { (error, value) in
    if error != nil {
        return
    } else {
    }
}


这将导致以下结构被写入Firebase

TestNode
   name: "Leeroy",
   food: "pizza"


Firebase需要知道你想把数据存储在哪里;当你告诉它在 TestNode/food 节点中添加或更新 pizza 值时,它会知道你想把数据写在哪里。
字符串数组不应该直接写入Firebase,因为它只是一个数组。数组的每个元素通常与一个节点(键)相关联,使每个元素成为一个键:值对。这是一种很好的形式,使您的Firebase可查询,更易于维护。
虽然在Firebase中使用数组可能很诱人(因为它可以做到)-不要。这不是一个在NoSQL数据库中工作良好的概念。请参阅不要使用数组以及这篇文章,也许还有这篇文章以获得进一步的阅读。

i2byvkas

i2byvkas2#

Firebase支持键值对,所以如果你想存储一个数组,你需要给这个数组分配一个键,比如

let customArray = ["a","b","c","d"]
myRef.child(recordId).updateChildValues([
   Keys.shopNameKey : shopName.text!,
   "custom" : customArray
])

字符串

问候

czq61nw1

czq61nw13#

请检查此代码,它将是工作

let key = ref.child("posts").childByAutoId().key
let post = ["uid": userID,
        "author": username,
        "title": title,
        "body": body]
let childUpdates = ["/posts/\(key)": post,
                "/user-posts/\(userID)/\(key)/": post]
ref.updateChildValues(childUpdates)

字符串
作为Firebase文档检查Firebase中的更新字段

相关问题