如何将数组放入Firebase Swift

时间:2018-03-03 03:47:15

标签: swift firebase firebase-realtime-database

很快我似乎无法做到这一点。将Array或Strings放入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 {
        }
    }

2 个答案:

答案 0 :(得分:0)

您的代码很接近,但让我们来看看它的作用。 Firebase结构总是关键:值对(例如想想字典)所以这是有效的

name: "Leeroy"

这不是

"TestNode"

正如您所看到的,TestNode不是关键:值对。

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

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

这是有效的密钥:值对

user_0
  name: "Leeroy"

因为 user_0 是键和名称:&#34; Leeroy&#34; 是值,它也是键:值对。

您的代码无法正常工作,因为它尝试将单个字符串 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数据库中运行良好的概念。请参阅Don't Use Arrays以及this post以及this one以供进一步阅读。

答案 1 :(得分:-1)

请检查此代码,它将起作用

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文档Chek Update Field in firebase