Swift中Firebase存储参考之后执行功能的问题

时间:2017-07-11 01:50:23

标签: swift firebase firebase-storage

我使用以下代码更新Firebase中的个人资料照片:

    func saveProfileImage(_ userUID: String, _ completion: @escaping (Error?) -> Void) {
    let resizedImage = image.resized()
    let imageData = UIImageJPEGRepresentation(resizedImage, 1.0)

    ref = StorageReference.profileImages.reference().child(userUID)
    downloadLink = ref.description

    ref.put(imageData!, metadata: nil) {
        (metaData, error) in
        completion(error)
    }
    updateProfilePic(userUID)
}

updateProfilePic是一个触发childChanged的功能,因此用户可以下载新的配置文件pic。它没有工作,我认为这是因为它在StorageReference完成更新之前被调用。是否有任何方法可以确保仅在参考完成后调用该函数?

2 个答案:

答案 0 :(得分:1)

对于仅在完成块运行时需要调用的代码,您应该将所述代码放在完成块中,因此请更改:

ref.put(imageData!, metadata: nil) {
        (metaData, error) in
        completion(error)
    }
    updateProfilePic(userUID)

    ref.put(imageData!, metadata: nil) {
        (metaData, error) in

        guard error == nil else {
           print("Error from adding to FIRDatabase: \(error)")
           return
        }

        self.updateProfilePic(userUID)
    }

如果在完成块成功后必须始终调用updateProfilePic

答案 1 :(得分:0)

要确保在上传完成后调用updateProfilePic(),请将其移至回调/完成处理程序:

func saveProfileImage(_ userUID: String, _ completion: @escaping (Error?) -> Void) {
    let resizedImage = image.resized()
    let imageData = UIImageJPEGRepresentation(resizedImage, 1.0)

    ref = StorageReference.profileImages.reference().child(userUID)
    downloadLink = ref.description

    ref.put(imageData!, metadata: nil) {
        (metaData, error) in
        completion(error)
        updateProfilePic(userUID)
    }
}