0
Objective-Cでは、ディスパッチソースのイベントハンドラをブロックまたは関数として指定できます。 AppleのConcurrency Programming Guideから:Swift 3のDispatchSourceのGCD関数イベントハンドラ?
機能ベースのイベントハンドラは、シングルコンテキスト・ポインタを取る は、ディスパッチソースオブジェクトを含む、そして何も値を返しません。 ブロックベースのイベントハンドラはパラメータを取らず、戻り値は です。
スウィフト3では、関数をイベントハンドラとして使用することはできますか?私はブロックの使い方しか見ていない。私はハンドラ内のソースにアクセスする必要があり、ソースが定義されている場所とは別にハンドラを定義する必要があります。
ブロックイベントハンドラを使用していますが、ソースをキャプチャするように記述していますか?そうですか? 'let foo:(DispatchSourceRead) - > Void = {source in print(" hi \(source) ")}'そして、 'source.setEventHandler {foo(source)}'のようなこともできますか?言い換えれば、なぜ 'class Foo'が必要ですか? – sam
クラスは必要ありません。それがなぜあなたがソースから離れて定義される必要があるのかという私の最初の考えでした。キャプチャを回避するには、ソースへの弱参照を使用するイベントハンドラにキャプチャリストを追加します。 –