【发布时间】:2017-09-13 15:31:12
【问题描述】:
我在下面使用了一个函数。我想要来自该异步函数的数据,但如果我尝试使用 fullResolutionImageData 函数之外的数据,它会出现 nil 。所以我必须写一个回调。但我不知道如何编写回调。有人可以告诉我如何为下面的异步函数编写回调,以便我可以在其他地方访问数据。你能告诉我如何编写回调,以便我可以访问fullResolutionImageData 异步函数之外的文件。
public func fullResolutionImageData(completion: @escaping (Data?) -> ()) {
SharedQueues.imageProcessingQueue.addOperation { [path] in
let data = try? Data(contentsOf: URL(fileURLWithPath: path))
DispatchQueue.main.async {
completion(data)
}
}
}
在我的视图控制器中,我有一个使用此功能的操作
class ViewController: UIViewController{
func buttonAction(sender:UIButton!){
var photos2: [ImageSource]?
var files : [Data] = []
let _ = self.photos2?.map ({completion: path in
path.fullResolutionImageData{ data in
files.append(data) --> (prints 2)
}
})
print("(files.count)") --> (prints 0 How do I write callback?)
}
}
【问题讨论】:
-
以这种结构方式实现您的网络服务:stackoverflow.com/a/46081822/3400991 按照此链接说明进行操作
-
我建议在图像处理完成后使用协议/委托模式通知您的
ViewController。 -
您能否进行编辑并告诉我如何执行此操作。我有点困惑。我是编码新手,还没有学到很多协议
-
@toddg 你能告诉我你在说什么
-
@Useruuu 你应该花时间详细研究异步编程。您的问题清楚地表明您缺乏问题的基础知识,因此要求回答者展示如何做一些不可能的事情。您想像访问同步函数一样访问异步函数的结果,但这不是它的工作原理。
标签: ios swift asynchronous swift3 callback