【Swift/Combine】handleEventsメソッドの使い方と役割!イベント取得

この記事からわかること
- SwiftのCombineフレームワークの使い方
- handleEventsメソッドの役割
- 実装サンプル
- イベント取得
- receiveSubscription/receiveOutput/receiveCompletion/receiveCancel/receiveRequestの違い
index
[open]
\ アプリをリリースしました /
SwiftのCombineフレームワークとは非同期処理やストリーム処理、データのバインディング、イベントハンドリングなどのリアクティブプログラミングに倣った機能を提供しているApple純正のフレームワークです。今回はその中のhandleEventsメソッドについてまとめていきます。
handleEventsメソッドとは?
func handleEvents(
receiveSubscription: ((Subscription) -> Void)? = nil,
receiveOutput: ((Self.Output) -> Void)? = nil,
receiveCompletion: ((Subscribers.Completion<Self.Failure>) -> Void)? = nil,
receiveCancel: (() -> Void)? = nil,
receiveRequest: ((Subscribers.Demand) -> Void)? = nil
) -> Publishers.HandleEvents<Self>
handleEvents
メソッドはPublisherの任意のイベントが発生した際に指定のクロージャを実行するメソッドです。このメソッドを使用することでパブリッシャーのイベントに応じた処理を挿入することが可能になります。監視できるイベントは値の発行や、エラー、完了などです。
監視できるイベント
監視できるイベントを具体的には以下の5種類となっています。
receiveSubscription
パブリッシャーが上流パブリッシャーからサブスクリプションを受け取ったときに実行されるオプションのクロージャ
receiveOutput
パブリッシャーが上流のパブリッシャーから値を受け取ったときに実行されるオプションのクロージャ
receiveCompletion
上流のパブリッシャーが正常に終了するか、エラーで終了するときに実行されるオプションのクロージャ
receiveCancel
ダウンストリーム受信者がパブリッシュをキャンセルしたときに実行されるオプションのクロージャ
receiveRequest
パブリッシャーが追加の要素のリクエストを受け取ったときに実行されるオプションのクロージャ
実装サンプル
例えばイベントのタイミングでログを出力する場合は以下のようになります。
let integers = (0...2)
let cancellable = integers.publisher
.handleEvents(receiveSubscription: { subs in
print("Subscription: \(subs.combineIdentifier)")
}, receiveOutput: { anInt in
print("in output handler, received \(anInt)")
}, receiveCompletion: { _ in
print("in completion handler")
}, receiveCancel: {
print("received cancel")
}, receiveRequest: { (demand) in
print("received demand: \(demand.description)")
})
.sink { _ in return }
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
個人開発に限界を感じたらiOSに特化したプログラミングスクール「iOSアカデミア」も検討してみてください!無料相談可能で「最短・最速」でiOSエンジニアになれるように手助けしてくれます。