为什么函数返回nil FireBase Swift [英] Why function return nil FireBase Swift
本文介绍了为什么函数返回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屋!
查看全文