【Swift】 Combine Publisher Operatorsまとめ

iOS, Swift

この記事は最終更新日から1年以上が経過しています。

はじめに

こんにちは。iOSアプリ開発グループの神山です。

最近Combineについて触れる機会があり、絶賛勉強中です。

今回はCombineの中で、流れてきたPublisherに処理を施してPublisherを再生成することのできるOperatorについてまとめてみました。

Operatorとは

Operatorは流れてきたイベントを加工して、新たなイベントを流すことができるPublisherの機能の一つです。

Appleのドキュメントにはこのような記載があります。

Use operators to assemble a chain of republishers, optionally ending with a subscriber, that processes elements produced by upstream publishers. Each operator creates and configures an instance of a Publisher or Subscriber, and subscribes it to the publisher that you call the method on.

つまり以下の図のような流れでPublisherをSubscribeすることができます。

Operator.png

Operator使用例

Operatorは非常に多くあるため、ここでは一部をご紹介いたします。

マッピング系

map: あるデータ型を別のデータ型に変換する

Map.png

tryMap: エラーをthrowすることのできる map

TryMap.png

flatMap: あるPublisherを別のPublisherに変換する

FlatMap.png

scan: 最後に返された値と共に流れてきた値を処理する

Scan.png

tryScan: エラーをthrowすることのできる scan

TryScan.png

フィルタリング系

compactMap: nilを排除して値を返却する

CompactMap.png

filter: 条件に合わない値を排除して値を返却する

Filter.png

removeDuplicates: 以前に送信された値を記憶し、現在の値と一致しない値のみを返却する

RemoveDuplicate.png

まとめる系

reduce: 全ての要素をまとめて値を返却する

Reduce.png

collect: 流れてきた要素を配列にまとめて値を返却する

Collect.png

数値系

max: 流れてきた値の最大値を返却する

Max.png

min: 流れてきた値の最小値を返却する

Min.png

count: 流れてきた値の個数を返却する

Count.png

条件合致系

allSatisfy: 全ての要素に対して条件処理を行い、全一致しているかどうかの単一のBool値を返却する

AllSatisfy.png

contains: 全ての要素に対して条件処理を行い、部分一致しているかどうかの単一のBool値を返却する

Contains.png

組み合わせる系

combineLatest: 1つのPublisherに対して複数のPublisherを接続して、メインの現在の値と共に接続した値を返却する

CombineLatest.png

merge: 1つのPublisherに対して複数のPublisherを接続して、メインで流された値と接続した値を返却する

Merge.png

zip: 2つのPublisherを結合し、値をタプルで返却する

Zip.png

エラーハンドリング系

catch: エラーを受け取った際に新たなPublisherを作成する

Catch.png

mapError: エラーを新たなエラーに変換する

MapError.png

さいごに

今回ご紹介したOperatorはほんの一部で、他にもさまざまな機能を有したものがあります。

全てを把握するのはとても大変なので、実際に開発していく中で使用方法について理解を深めていこうと思います。

最後まで記事を読んで頂き、ありがとうございました。

参考文献

Apple document (Publisher Operators)

Combine in Practice

iOS, Swift