我正在尝试同时从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()函数的方式工作。我们希望这样做的原因是因为它可以在一个呼叫中从多个位置删除。
所以这里的问题是
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"