如何等待自身具有异步操作的函数完成?
让我给你举个例子:
Function_A
从图库中提取照片 . 使用提取闭包异步执行提取操作 .
我在 Function_B
中调用 Function_A
并且我想等待照片获取操作完成,然后继续我的代码 .
我尝试过的:
我've used dispatch group but it has not worked. I'也试图在同步块中调用 Function_A
,这也不成功 .
我该如何等待此操作完成?由于将提取操作运行到另一个队列,可能是这个问题吗?
Update :
这就是我做的:
class imageFetch: NSObject{
var theImage: PHAsset? = nil
func Function_A(){
let fetchOption = PHFetchOptions()
PHPhotoLibrary.requestAuthorization { (authStatus) in
// It seems code will be executed asynchronously from here
if authStatus == .authorized{
let imageAsset = PHAsset.fetchAssets(with: .image, options: fetchOption)
// Select image and save it in theImage
// I know I can send a closure and run it here
}
}
}
}
在另一个类中,我称之为该函数:
class edit: NSObject{
funct Function_B(){
var imageFetchIns = imageFetch()
// I want below code to execute asynchronously
imageFetchIns.Function_A()
// Now I want to wait last operation to finish
}
}
1 回答
没有代码很难理解发生了什么 . 如果你看看Using dispatch groups to wait for multiple web services,你会发现发生了什么 .
否则,您可以开始使用
NSOperation
和NSOperationQueue
. 实际上,如果您有两个操作,则可以在它们之间添加依赖关系 . 换句话说,您可以说操作只能在它所依赖的操作完成后才能开始执行 . 除此之外,操作还具有可取消的好处 . 例如,当您想要处理用户操作时很有用 . NSOperation and NSOperationQueue Tutorial in Swift将为您提供有关如何使用它们的非常好的介绍 .我想强调的是操作是一个操作(特别是当你将它子类化时)代表一个可以重复使用的自包含任务 - 在你的项目中或在不同的项目中 .