为什么函数返回nil FireBase Swift [英] Why function return nil FireBase Swift

查看:38
本文介绍了为什么函数返回nil FireBase Swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么函数都返回nil ?!我尝试添加DispathQue,但我不知道它应该是正确的!请帮助

Why ever function return nil?! I try add DispathQue but I don't understand how it should be right! Pls Help

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
        }

推荐答案

在被调用者函数中的异步函数完成执行之前,您将返回 downloadURL .
此时,它将具有 nil 值,这是正确的.
您将希望使用完成处理程序在 downloadURL 准备就绪时返回它,例如-

You're returning downloadURL before the asynchronous function within your callee function has finished execution.
At this point, it will have nil value, which is correct.
You'll want to use a completion handler to return downloadURL when its ready, like -

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)
                }
            })
        }
    }

这篇关于为什么函数返回nil FireBase Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆