且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

为什么函数返回nil FireBase Swift

更新时间:2023-11-29 07:59:40

在被调用者函数中的异步函数完成执行之前,您将返回 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)
                }
            })
        }
    }