それ自身が非同期操作を完了する関数を待つ方法はありますか?非同期操作の関数が終了するのを待つ
例を挙げましょう:
Function_A
は、ギャラリーから写真を取り出します。フェッチ操作は、フェッチクロージャを使用して非同期に実行されます。
Function_A
をFunction_B
に電話して、写真の取得操作が完了するのを待ってから、コードを続けてください。
私が試した何を:私はディスパッチグループを使用しましたが、それは働いていない
。私はまた、同期ブロックでFunction_A
に電話しようとしましたが、これも失敗しました。
どうすればこの操作が完了するのを待つことができますか?フェッチ操作を別のキューに実行しているためにこの問題が発生する可能性がありますか?
更新:
これは私がやったことです:
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
}
}
約束のライブラリを調べましたか? – Malik
dispatchgroupが機能しない理由がわかりません。コードを表示してみてください。 – zach274
また、RxSwiftはタスクを簡単に解決します – iWheelBuy