为什么函数 return nil FireBase Swift

Why function return nil FireBase Swift

为什么函数 return nil?! 我尝试添加 DispathQue 但我不明白它应该如何正确! 请帮忙

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
        }

您 returning downloadURL 在被调用函数中的异步函数完成执行之前。
此时,它会有 nil 值,这是正确的。
您需要在 return downloadURL 准备就绪时使用完成处理程序,例如 -

func storagePutData(uid: String, image: UIImage, success:@escaping (String?)->(), error: @escaping (Error?) -> Void) {
        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 {
                error(err)
            }
            ref.downloadURL(completion: { (url, error) in
                if let err = error {
                    error(err)
                } else {
                    downloadURL = url?.absoluteString
                    success(downloadURL)
                }
            })
        }
    }