Почему функция возвращает nil!?

ios

#1

Почему функция всегда возвращает nil!???

 func storagePutData(uid: String, image: UIImage, compretition: @escaping (Error?) -> Void) -> String {
            var downloadURL: String!
            let imageName = NSUUID().uuidString
            let uploadDara = UIImageJPEGRepresentation(image, 0.1)!
            let ref = self.refStorage.child("usersProfileImage/\(uid)/\(imageName).png")
                
            ref.putData(uploadDara, metadata: nil) { (metaDara, error) in
                if let err = error {
                    compretition(err)
                }
                ref.downloadURL(completion: { (url, error) in
                    if let err = error {
                        compretition(err)
                    } else {
                        downloadURL = url?.absoluteString
                    }
                })
            }
            return downloadURL
        }

#2

Она у Вас nil не может возвращать, только String. Видимо у Вас где-то по пути вылетает она?


#3

Решена проблема!

func signUP(name: String, email: String, password: String, image: UIImage, completition: @escaping (Error?) -> Void) {
            var values: [String: Any] = ["name": name, "email" : email, "status": "Бездомный"]
            Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
                if let err = error {
                    completition(err)
                    print(err)
                } else {
                    guard let uid = user?.user.uid else {return}
                    self.storagePutData(uid: uid, image: image, comletetion: { (downloadURL, error) in
                        if let err = error {
                            completition(err)
                        }
                        if let url = downloadURL {
                            values["downloadURL"] = url
                            self.setUserInDataBase(uid: uid, values: values, comletion: { (error) in
                                completition(error)
                            })
                        }
                    })
                }
            }
        }
        
        private func storagePutData(uid: String, image: UIImage, comletetion: @escaping (String?, Error?) -> ()) {
            let imageName = NSUUID().uuidString
            let uploadDara = UIImageJPEGRepresentation(image, 0.1)!
            let ref = self.refStorage.child("usersProfileImage/\(uid)/\(imageName).png")
            
            ref.putData(uploadDara, metadata: nil) { (metadata, error) in
                if let err = error {
                    comletetion(nil, err)
                }
                ref.downloadURL(completion: { (url, error) in
                    if let err = error {
                        comletetion(nil, err)
                    } else {
                        comletetion(url?.absoluteString, nil)
                    }
                })
            }
            
        }
        
        private func setUserInDataBase(uid: String, values: [String: Any], comletion: @escaping (Error?) -> ()) {
            let userRef = self.refDatabase.child("users/\(uid)")
            userRef.updateChildValues(values) { (error, ref) in
                if let err = error { comletion(err) }
            }
        }