【发布时间】:2020-11-06 15:44:11
【问题描述】:
我正在制作一个用户发布 2 张图片的应用。我使用 Firebase 进行存储并作为我的数据库。
在我上传图片的方法中,我想做的基本上是使用这种方法来分别返回 URL。我写了以下内容:
private func uploadImage(image: UIImage) -> URL? {
let randomName = UUID()
let storageRef = storage.reference().child("\(randomName)/png")
guard let uploadData = image.pngData() else { return nil}
var imageUrl: URL?
storageRef.putData(uploadData, metadata: nil) { (metadata, error) in
if error != nil {
print(error?.localizedDescription)
return
}
storageRef.downloadURL { (url, error) in
if error != nil {
print(error?.localizedDescription)
} else {
imageUrl = url
}
}
}
return imageUrl
}
然后我编写了以下“发布”方法,该方法在点击提交按钮时运行:
@objc func post() {
if let question = questionText.text,
let hashtagText = hashtagTextField.text,
let userHandle = Auth.auth().currentUser?.email,
let firstImage = left.image,
let secondImage = right.image,
let firstImageURL = uploadImage(image: firstImage)?.absoluteString,
let secondImageURL = uploadImage(image: secondImage)?.absoluteString
{
db.collection("posts").addDocument(data: [
"firstImage" : firstImageURL,
"secondImage" : secondImageURL,
"question" : question,
"hashtagText" : hashtagText,
"userHandle" : userHandle
]) { (error) in
if let e = error {
print("There was an issue saving data to Firestore, \(e)")
} else {
print("Successfully saved data")
self.dismiss(animated: true, completion: nil)
}
}
}
}
但是,显然第一种方法不起作用,因为在返回 imageUrl 之后运行闭包,因此返回 nil。
我一直在试图弄清楚如何管理这种情况 - 我曾考虑使用循环来填充图像数组,但这变得混乱,我确信这不是处理这个问题的标准方法。任何帮助将不胜感激。
【问题讨论】:
标签: swift database firebase google-cloud-firestore uiimage