首页 > 解决方案 > storageRef.downloadURL 没有在里面执行代码

问题描述

func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let storageRef = Storage.storage().reference().child("user/\(uid)")

    let imageData = image.jpegData(compressionQuality: 0.75)

    let metaData = StorageMetadata()
    metaData.contentType = "image/jpg"

    storageRef.putData(imageData!, metadata: metaData)
    //Get url
    let imageRef = storageRef
    imageRef.downloadURL { url, error in
        if let error = error {
            print(error.localizedDescription)
        }else{
            print(url.absoluteString)
        }
    }

}

里面的代码不会执行,它会跳过所有内容,就像没有存储代码一样。我不确定完成是如何工作的,但我想它会打印错误或打印 url,但两者都不会。当我在这里设置断点时,它甚至不会检查是否错误 = 错误。是我做错了什么还是其他人有同样的问题?

imageRef.downloadURL { url, error in
    if let error = error {
        print(error.localizedDescription)
    }else{
        print(url.absoluteString)
    }
}

标签: swiftxcodefirebasefirebase-realtime-databasefirebase-storage

解决方案


您的 API 调用是异步的,因此为什么您需要而不是 print 实际上使用完成块来返回结果(错误或值)。


推荐阅读