简体   繁体   English

无法在swift中关闭回调?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM