为什么函数 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)
}
})
}
}
为什么函数 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)
}
})
}
}