Combine 入門-Cancellable
Oct 21, 2021
當 Subscriber 在某一時刻接收 Publisher 發布的數據時,可以取消訂閱以釋放資源。
Combine 中提供了 Cancellable 協議,該協議中定義了一個 cancel()
方法,用於取消 pipline。可取消的定義如下:
protocol Cancellable {
func cancel()
}
Combine 中還定義了一個 AnyCancellable
,實現了 Cancellable 協議,特點是會在該類別 deinit()
時自動執行cancel()
方法,定義如下:
final public class AnyCancellable : Cancellable, Hashable {}extension AnyCancellable {final public func store(in set: inout Set<AnyCancellable>)}
上篇提到的 sink()
和 assign(to:on:)
的返回值都是 AnyCancellable,所以它們都可以調用cancel()
方法來取消 pipline。
使用一個屬性來指向這個返回值,在需要的時候取消 pipline。
如果用到了多個 pipeline,可以把他們保存到一個Set<AnyCancellable>
集合