Combine 入門-Cancellable

Zhi-Hong Lin
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>集合

--

--

No responses yet