Reputation: 435
How do you execute a completion listener for firebase in swift? It says there are completion listers for SetValue and UpdateValue in the docs but there is no example.
Upvotes: 3
Views: 3039
Reputation: 352
For setValue
in Firebase you can write completion
blocks as below:
let ref = Database.database().reference().child("somepath")
ref.setValue("value") { (error, databaseRef) in
if error != nil {
print("Error for setting value")
} else {
print("Value set successfully.")
}
}
For updateValue
in Firebase:
let newKeyValueData:[String:Any] = ["key1":"value1", "key2":value2] as [String:Any]
ref.updateChildValues(["someKey":"value"]) { (error, dbRef) in
if error != nil {
print("Error for updating value")
} else {
print("Value updated successfully.")
}
}
Upvotes: 0
Reputation: 35667
The completion of a setValue is handled within the {} block (closure). So once the attempt to setValue is made, the code within that block executes. error will be nil if none and snapshot will be the data that was written.
let ref = self.myRootRef.child("some_path")
ref.setValue("Hello", withCompletionBlock: { (error, snapshot) in
if error != nil {
print("oops, an error")
} else {
print("completed")
}
})
gives a result of
root_ref
some_path: Hello
and prints "completed"
Upvotes: 7
Reputation: 428
An example of using completion handler for setValue in firebase is given below. Similarly you can use completion handler for methods.
func saveJob(completion:(Bool)-> Void) {
FIRDatabase.database().reference().child("Job").setValue(["Title":self.title!,"Detail":self.details!], withCompletionBlock: { (error, ref) in
debugPrint("Completed")
completion(true)
})
}
Upvotes: 1