Valor do tipo ‘StorageMetadata’ não tem membro ‘downloadURL’

Ei, eu preciso de ajuda com esse código, não tenho certeza do que aconteceu. Foi trabalhando no outro dia. O erro surge após if let ur; = metaData?.downladURL() if let ur; = metaData?.downladURL()

 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)") guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return } let metaData = StorageMetadata() metaData.contentType = "image/jpg" storageRef.putData(imageData, metadata: metaData) { metaData, error in if error == nil, metaData != nil { if let url = metaData?.downloadURL() { completion(url) } else { completion(nil) } // success! } else { // failed completion(nil) } } } 

Você provavelmente atualizou seus pods do Firebase. No Firebase 5.0, eles se livraram da function metaData?.downladURL() . Você precisa seguir os documentos atualizados no site deles. Copiando de lá:

 // Data in memory let data = Data() // Create a reference to the file you want to upload let riversRef = storageRef.child("images/rivers.jpg") // Upload the file to the path "images/rivers.jpg" let uploadTask = riversRef.putData(data, metadata: nil) { (metadata, error) in guard let metadata = metadata else { // Uh-oh, an error occurred! return } // Metadata contains file metadata such as size, content-type. let size = metadata.size // You can also access to download URL after upload. storageRef.downloadURL { (url, error) in guard let downloadURL = url else { // Uh-oh, an error occurred! return } } } 
  // MARK: - handleRegister func handleRegister() { guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text else { print("Error") return } Auth.auth().createUser(withEmail: email, password: password) { (user, error) in if error != nil { // print("Error") return } // MARK: - hadleLogin// guard let uid = Auth.auth().currentUser?.uid else { return } // MARK: - image successful authenficated user let imageName = NSUUID().uuidString let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).png") if let profileImageUrl = self.profileImageView.image, let uploadData = UIImageJPEGRepresentation(self.profileImageView.image!, 0.1) { storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in if error != nil, metadata != nil { print(error ?? "") return } storageRef.downloadURL(completion: { (url, error) in if error != nil { print(error!.localizedDescription) return } if let profileImageUrl = url?.absoluteString { let values = ["name": name, "email": email, "profileImageUrl": profileImageUrl] self.registeUserIntoDatabaseWithUID(uid: uid, values: values as [String : AnyObject]) } }) }) } } } 

Atualize seus pods e coloque isso:

 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)") guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return } let metaData = StorageMetadata() metaData.contentType = "image/jpg" storageRef.putData(imageData, metadata: metaData) { metaData, error in if error == nil, metaData != nil { storageRef.downloadURL { url, error in completion(url) // success! } } else { // failed completion(nil) } } }