一尘不染

使用UpdateChildValues从Firebase中删除

swift

我正在尝试同时从Firebase数据库中的多个位置删除数据。

火力地堡文档状态:

“删除数据的最简单方法是在对数据位置的引用上调用removeValue。您还可以通过将nil指定为另一个写操作(例如setValue或updateChildValues)的值来进行删除。您可以将此技术与updateChildValues一起使用以进行删除一个API调用中有多个子级。”

我的代码是

let childUpdates = [path1 : nil,
                    path2 : nil,
                    path3 : nil,
                    path4 : nil]

    ref.updateChildValues(childUpdates)

所有四个路径都是字符串,但是出现错误:

“表达的类型是模棱两可的,没有更多的上下文。”

我认为这是由于nil值引起的,因为如果我将nil替换为其他任何值(例如Int),错误就会消失。

使用updateChildValues从Firebase删除数据的正确方法是什么?我们希望它以类似于Firebase中的removeValue()函数的方式工作。我们希望这样做的原因是因为它可以在一个呼叫中从多个位置删除。


阅读 230

收藏
2020-07-07

共1个答案

一尘不染

所以这里的问题是

ref.updateChildValues(childUpdates)

需要[String:AnyObject!]参数来更新ChildValues,而AnyObject!不能为nil(即您不能使用AnyObject?这是可以为nil的可选)

但是,您可以这样做

let childUpdates = [path1 : NSNull(),
                    path2 : NSNull(),
                    path3 : NSNull(),
                    path4 : NSNull()]

因为AnyObject!现在是NSNull()对象(不是nil),并且Firebase知道NSNull是nil值。

编辑

您可以对此进行扩展以进行多位置更新。假设您有一个结构

items
   item_0
      item_name: "some item 0"
   item_1
      item_name: "some item 1"

并且您想要更新两个项目名称。这是快速代码。

func updateMultipleValues() {
    let path0 = "items/item_0/item_name"
    let path1 = "items/item_1/item_name"

    let childUpdates = [ path0: "Hello",
                         path1: "World"
    ]

    self.ref.updateChildValues(childUpdates) //self.ref points to my firebase
}

结果是

items
   item_0
      item_name: "Hello"
   item_1
      item_name: "World"
2020-07-07