問題タブ [completion-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1357 参照

objective-c - Objective-C の完了ブロックを Swift に変換するには?

Objective-C のブロック構文を Swift Xcode 6.3.2 に変換しようとしています

完了ブロックの typedef:

ネットサーフィンした後、試してみました

しかし、それは私にエラーを示しています

',' セパレータが必要です

式のリストに期待される式

0 投票する
2 に答える
205 参照

swift - 迅速な完了ブロック

私は以下を達成したい:

  1. classB では、1 つのオブジェクトを追加した後にデータベースをリロードします。reloadDatabase()completionBlock 内で呼び出されます。
  2. classB では、データベース オブジェクトの最新のリストを取得するためにreloadDatabase()呼び出さgetObjects()れ、classB に渡されます。classAobjectList

質問: getObjectList()classB で呼び出すたびに、常に最新のリストを取得するにはどうすればよいですか? 私の理解では、objectList更新されていない可能性がありますreloadDatabase() blockgetObjectList()まだ完了ブロックに達していないときに呼び出すことができますreloadDatabase()(objectList はまだ古い objectList です)。

私はクロージャーとブロックにかなり慣れていません。どんなガイダンスも大歓迎です!

0 投票する
1 に答える
749 参照

swift - CloudKit 関数への完了ブロックの追加

私の ViewController は、CloudKit クエリに基づいていくつかのデータを表示したいと考えています。

私の CloudKit コードはすべて別のクラスにあります。そのクラスには、CK から一部の Expenses エンティティをフェッチする loadExpenses() という関数があります。

VC から loadExpenses() を呼び出せるようにしたいので、VC から UI を更新する関数によって提供される完了ブロックが必要です。

loadExpenses() は次のようになります。

これらすべての self.property が VC に属していることを考えると、明らかに最後の部分は実行されません (VC で何をする必要があるかを示すためだけにそれらを保持しました)。

私が言ったように、VC からこの関数を呼び出し、完了ブロックを取得/使用して、これらのプロパティを更新できるようにしたいと考えています。それ、どうやったら出来るの?

0 投票する
2 に答える
941 参照

objective-c - 実行を継続する前に、あるメソッドが別の (非同期) メソッドの終了を待機するようにする方法は?

他の人がこの問題をどのように解決したかを調べるためにたくさん検索しましたが、残念ながら、この特定の質問に対する答えは見つかりませんでした. よろしくお願いします。

要約は次のとおりです。私のクラスには、method1 と method2 という 2 つのメソッドがあります。method1 内で非同期関数を呼び出す必要があります。その後、コードは実行を続け、method2 に到達します。しかし、メソッド 2 では、その非同期呼び出しの結果をメソッド 1 で使用する必要がある場合があるため、メソッド 2 の残りの部分に進む前に、メソッド 1 の非同期呼び出しが終了していることを確認する必要があります。

1 つはセマフォを使用する方法で、もう 1 つは完了ブロックを使用する方法です。しかし、私はこれを最も一般的な方法で行いたいと考えています。これは、実行を続行する前に、method1 の非同期呼び出しが完了するまで待機する必要がある method2 と同様の他のメソッドがあるためです。また、同じ理由で、単純に method2 自体の内部で async 関数を呼び出して、残りの method2 をその完了ブロックに入れることはできません。

これが私がやろうとしていることの大まかな考えです。誰かがこの疑似コードに CompletionBlocks を追加してくれるとありがたいです。そうすれば、物事がどのように機能するかを明確に理解できます。ところで、method1 と method2 (およびこのクラスの他のすべてのメソッド) は同じスレッド上にあります (メイン スレッドではありません)。

更新: 非同期呼び出しが完了したらセマフォにシグナルを送ることができ、method2 で同じセマフォを待つことができることはわかっていますが、代わりに完了ブロックを使用したいと考えています。このクラスの method2。このコードを機能させるのに問題があるので、誰かがこのコードに完了ブロックを追加してもらえますか?