gpt4 book ai didi

Swift 控制流(函数调用)

转载 作者:行者123 更新时间:2023-11-28 15:38:01 27 4
gpt4 key购买 nike

我正在写这段代码:

func checkUserImages() {
if (self.imagesAdded.count == 0) {
self.success()
} else {
if (self.checkNetwork() == false) {
self.displayNoNetworkConnection()
} else if (self.checkUser() == false) {
print("THERE IS NO CURRENT USER")
} else {
self.progressHUD = MBProgressHUD.showAdded(to: self.view, animated: true)
self.progressHUD.label.text = "Loading"
if (self.imagesAdded.contains("Header")) {
print("CALL 1")
self.uploadImage(image: self.headerImageView.image!, imageType: "headerPicture")
}
if (self.imagesAdded.contains("Profile")) {
print("CALL 2")
self.uploadImage(image: self.profileImageView.image!, imageType: "profilePicture")
}
self.addImageLinksToDatabase()
}
}
}

func uploadImage(image: UIImage, imageType: String) {
let imageUploadData = image.mediumQualityJPEGData
storageReference.child("users").child("\(imageType)s").child("\(currentUser!.uid)\(imageType)").putData(imageUploadData, metadata: nil) { (metadata, error) in
if let error = error {
self.progressHUD.hide(animated: true)
self.displayError(title: "Error", message: error.localizedDescription)
} else {
self.imageData[imageType] = metadata?.downloadURL()?.absoluteString
}
}
}

func addImageLinksToDatabase() {
databaseReference.child("users").child(currentUser!.uid).child("userDetails").updateChildValues(self.imageData, withCompletionBlock: { (error, ref) in
if let error = error { // Checks for an error
self.progressHUD.hide(animated: true)
self.displayError(title: "Error", message: error.localizedDescription)
} else {
self.success()
}
})
}

func success() {
self.progressHUD.hide(animated: true)
self.performSegue(withIdentifier: "successfulAddPhotosSegue", sender: self)
}

看起来 checkUserImages() 函数中的最后一行代码在图像在 uploadImage() 函数中完成上传之前被调用。因此,还没有为 addImageLinksToDatabase() 函数准备好的数据。这是多线程错误吗?我该如何修复流程,以便在调用 addImageLinksToDatabase() 之前上传图像?

最佳答案

这是由于多线程。解决方法很简单。只需将最后一行代码从 checkUserImages() 移动到 uploadImage() 的末尾。

例如。

func uploadImage(image: UIImage, imageType: String) {
let imageUploadData = image.mediumQualityJPEGData
storageReference.child("users").child("\(imageType)s").child("\(currentUser!.uid)\(imageType)").putData(imageUploadData, metadata: nil) { (metadata, error) in
if let error = error {
self.progressHUD.hide(animated: true)
self.displayError(title: "Error", message: error.localizedDescription)
} else {
self.imageData[imageType] = metadata?.downloadURL()?.absoluteString
}
}
self.addImageLinksToDatabase()
}

这应该可以完美地工作。

关于Swift 控制流(函数调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com