我正在Swift中编写一个应用程序,但我遇到了一个我无法找到帮助的问题。
所以我有一个ViewController和一个名为CameraHandler的类,它使用一个ActionSheet调用ActionSheet然后呈现相机或图库选择器并保存结果图像。
我想要做的是:调用相机,保存图像,然后将相关信息存储到对象。
CameraHandler.shared.showActionSheet(vc: self, reg: car.registration)
self.car.imagePath = CameraHandler.shared.returnFilePath()
self.storeCar() // completes before CameraHandler can get imagepath
我的解决方法是使用一个简单的DispatchQueue等待10秒,希望它及时完成。
答案 0 :(得分:0)
亚特在评论中说,不要等。不要指望从您的函数返回答案。您需要重写showActionSheet()
函数以获取完成处理程序。 (这是一个代码块{更具体地说,是一个闭包},你作为参数传递。)当你的函数从异步进程得到答案时,它需要完成(从远程服务器获取一个值,提示用户输入一些东西)等等)然后它调用完成处理程序。
请参阅我对以下主题的回答。我包含一个示例项目,该项目使用带有完成处理程序的函数从远程服务器获取数据。
答案 1 :(得分:0)
使用其他编程语言中的闭包或块作为完成处理程序,举个例子。
git push --mirror
然后你就可以使用它:
func returnFilePath(completionHandler: ((String) -> ()) {
// after get file path
completionHandler(path)
}