2017-12-13 5 views
0

私は仕事と呼び出しを完了する機能を持っています。このようなものブロック内でブロックを完了する前に予測できないデータを待つ

func doStuff(completion: (Bool) ->()) { 
    performWork() 
    completion(true) 
} 

performWorkは、他のメソッドで結果を受け取るプロセスをトリガーするという問題があります。そして、この結果によっては、completionという呼出しが成功しているか、前の方法のデータに基づいていないとかです。

解決策はありますか?メソッドdoStuffを変更することはできません。私はその第三者にperformWork()へのアクセス権を持っていません。私はそれを呼び出すことしかできません。

+0

'performWork'の補完ブロックも使用し、' completion'を呼び出します。 – the4kman

+0

"performWorkは他のメソッドの結果を受け取る何らかのプロセスをトリガします"あなたは 'performWork()'が非同期であることを意味しますか?その後、 'performWork()'に補完ハンドラを追加します。 – Larme

+0

いいえ私はperformWork、そのサードパーティのAPIにアクセスできない –

答えて

0

completionをクラスのスコープ内の変数に保存し、APIの委任メソッドで実行する必要があります。

var doStuffCompletion: (Bool) ->()! 

func doStuff(completion: (Bool) ->()) { 
    performWork() 
    doStuffCompletion = completion 
} 

func apiStuffFinished(success: Bool) { 
    doStuffCompletion(success) 
} 
関連する問題