[英]Unable to get callback in closure in swift?
I have viewcontroller from where i upload media to firebase & send url of media to my server as API call.Now for uploading images & call API i have created seprate class.There i have created a function which does the uploading work. 我有viewcontroller从哪里上传媒体到firebase并发送媒体网址到我的服务器作为API调用。现在上传图像和调用API我创建了seprate类。我创建了一个功能,它进行上传工作。
OfflineSync Class Function OfflineSync类功能
func UploadMediaToFireBase(sucess:@escaping ()->(),failure:@escaping (DIError)->()) {
DIFirebaseImageManager.firebaseInstance.uploadImage(data: data, withName: filepath, mimeType: mimeType, progress: { (progress)
in
}) { (callback, firebaseUrl, error) in
if let url = firebaseUrl {
self.uploadplace(place: self.place, done: {
sucess()
Utility.shared.hideLoader()
}, failed: { (result) in
failure(result)
Utility.shared.hideLoader()
})
}
}
}
Now when i recive url i call this function in 现在,当我回复网址时,我将此功能称为
func uploadplace(place:place,done:@escaping ()->(),failed:@escaping (DIError)->()) {
if let placeId = place.id {
placeManager.shared.editplace(placeId: placeId, place: place, success: { (success) in
AlertBar.show(.success, message: AppMessages.place.placeEdited)
done()
}, failure: { (failure) in
self.status = .cancelled
failed(failure)
})
}
}
Once i uploading of media on firebase & url saved on my server then i send callback to my controller as below code 一旦我将firebase上的媒体上传并保存在我的服务器上,然后我将回调发送到我的控制器,如下面的代码
OfflineSync.shared.UploadMediaToFireBase(sucess: {
DILog.print(items: "CallBack to MediaController")
self.navigationController?.popViewController(animated: true)
}, failure: { (failure) in
})
}
But issue is i never get any callback to my controller.I get callback of uplaodplace
to uplaodmediatofirebase
function.But i never get callback to my controllrer.Please tell what can be the issue? 但问题是我从来没有得到任何回调我的控制器。我得到
uplaodplace
回调uplaodmediatofirebase
功能。但我从来没有得到回调给我的控制者。请告诉可能是什么问题?
Try calling closure methods on Main thread, 尝试在主线程上调用closure方法,
Ex, 当然,
DispatchQueue.main.async{
sucess()
}
Similar for, 相似的,
failure(result)
done()
failed(failure)
And for others. 而对于其他人。
Refactoring code , 重构代码 ,
Also it seems you have not handled else conditions for if let
statements. 此外,似乎你没有处理
if let
语句的其他条件。
if let url = firebaseUrl {
self.uploadplace(place: self.place, done: {
sucess()
Utility.shared.hideLoader()
}, failed: { (result) in
failure(result)
Utility.shared.hideLoader()
})
}else{
failure(failureResult)
}
And also for this, 而且对此,
if let placeId = place.id {
placeManager.shared.editplace(placeId: placeId, place: place, success: { (success) in
AlertBar.show(.success, message: AppMessages.place.placeEdited)
done()
}, failure: { (failure) in
self.status = .cancelled
failed(failure)
})
}else{
failed(someFailure)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.