ChatGPTと一緒にCombineフレームワークについて少しだけ学習した記録。今後、理解した部分かr追記していければ。
Combine フレームワークについて
Combine は Apple が提供しているリアクティブプログラミングフレームワークで、データの流れやイベントを非同期で扱います。Publisher
と Subscriber
のモデルを使って、イベントの流れを購読(サブスクライブ)し、処理を行うことができます。
-
Publisher
: イベントやデータを生成するもの -
Subscriber
: イベントを受け取って処理するもの -
AnyCancellable
: 購読したイベントストリームを後でキャンセルできるトークン
AnyCancellable
について
AnyCancellable
は、Combine の購読をキャンセルするための型です。購読がキャンセルされると、Publisher
からの更新が停止し、メモリリークを防ぐことができます。
購読を開始したとき、AnyCancellable
が生成され、これを Set<AnyCancellable>
のようなコレクションに保持しておくことで、後で購読をキャンセルできます。コレクションに保持しない場合、購読がすぐにキャンセルされてしまいます。
使用例
購読を設定し、cancellables
に保持する例です。
import Combine
class MyViewModel {
private var cancellables: Set<AnyCancellable> = []
func setupSubscription() {
// Publisherを購読する
NotificationCenter.default.publisher(for: .someNotification)
.sink { notification in
print("Received notification: \(notification)")
}
.store(in: &cancellables) // AnyCancellableを保存
}
}
この例では、通知を購読し、その購読を cancellables
に保持しています。store(in:)
メソッドによって、購読はキャンセル可能なセットに保存され、必要に応じてキャンセルできます。
まとめ
-
cancellables: Set<AnyCancellable>
は、Combine
フレームワークで使用する購読(subscription
)のキャンセルを管理するためのプロパティです。 -
AnyCancellable
によって、購読を途中でキャンセルすることが可能になります。 -
Set<AnyCancellable>
は、複数のキャンセル可能な購読を保持しておくために使われます。