Я пытаюсь запустить какой-то код после того, как firebase завершит загрузку / выгрузку (например, segue или refresh)
например
У меня есть функции сохранения x3, которые имеют код для обновления как хранилища, так и базы данных определенных данных (например, текста и изображений)
save1()
save2()
save3()
при выполнении IBAction я хотел бы, чтобы эти функции выполнялись и по завершении, если нет ошибок, выполнять другую функцию при завершении (переход или обновление)
эти 3 функции сохранения в настоящее время работают в IBAction
@IBAction func saveTap(_ sender: Any) {
save1()
save2()
save3()
}
Сохранить функцию следующим образом:
(я проверяю, изменилось ли изображение, затем начинается процесс загрузки)
func save1(){
if image1.image == nil {
let gender = userGender.text
self.databaseRef.child("users").child(gender!).child(Auth.auth().currentUser!.uid).child("images").child("imageOne").removeValue { (error, ref) in
if error != nil {
print(error!)}
}
let imageRef = self.storage.child(Auth.auth().currentUser!.uid).child("image1")
imageRef.delete { error in
if let error = error {
print(error)
} else {
print("Photo 1 image deleted")}
}
} else {
//Firebase child references
let profileImageRef = storage.child(Auth.auth().currentUser!.uid).child("image1")
let metaData = StorageMetadata()
metaData.contentType = "image1/jpeg"
//Firebase child references
//change uiimageview to uiimage for upload
guard let image = image1.image else
{return}
//change uiimageview to uiimage for upload
//Send to firebase storage
profileImageRef.putData(image.jpegData(compressionQuality: 0.1)!, metadata: metaData) { (data, error) in
if error == nil
{print("Photo 1 uploaded to storage")}
else
{print(error?.localizedDescription as Any)}}
//Send to firebase storage
//Update firebase database
profileImageRef.downloadURL(completion: { (url, error) in
if error != nil{
print(error!)
return}
if let profilePhotoUrl = url?.absoluteString{
let newValuesForProfile = profilePhotoUrl
let gender = self.userGender.text
self.databaseRef.child("users").child(gender!).child(Auth.auth().currentUser!.uid).child("images").child("imageOne").setValue(newValuesForProfile, withCompletionBlock: { (error, ref) in
if error != nil{
print(error!)
return}
print("Photo 1 updated in database")})}})
//Update firebase database
}
Мне нужно завершить загрузку до того, как будут выполнены переходы, поскольку следующее представление будет обновлять сохраненные данные, которые я пытаюсь загрузить.
любая помощь была бы отличной, занимался этим уже несколько недель :( Я пробовал обработчики завершения, но пока не повезло.
заранее спасибо