Đối tượng trong RxSwift

Tram Ho

Subject trong RxSwift hoạt động như vừa là một Observable, vừa là một Observer. Khi một Subject nhận một .next event thì ngay lập tức nó sẽ phát ra các emit cho các subscriber của nó. Không chỉ vậy Subject còn được chia ra làm 4 loại: PublishSubject, BehaviorSubject, ReplaySubject, Variable với từng mục đích sử dụng. Chính vì những lý do như vậy nên Subject được sử dụng khá là phổ biến khi chúng ta làm việc với RxSwift.

Publish Subject

Publish subjects được sử dụng khi bạn chỉ muốn subscribers được thông báo về các sự kiện mới từ thời điểm bạn subscribe cho đến khi hủy subscribe hoặc Subject đã chấm dứt với sự kiện khi .completed hoặc .error.
Hãy thử một ví dụ để hiểu rõ hơn về Publish Subject:

Lưu ý: Tất cả các subject khi đã terminate thì vẫn re-emit stop event cho các subscriber mới trong tương lai. Chúng ta có thể thấy rõ điều đó thông qua ví dụ sau

Kết quả in ra sẽ là:

Chúng ta có thể thấy là subscriber 2 đã lắng nghe sau khi publish subject emit sự kiện complete nhưng vẫn có thể lắng nghe được.

BehaviorSubject

BehaviorSubject hoạt động tương tự như PublishSubject, nhưng chỉ khác ở chỗ BehaviorSubject khởi đầu với một giá trị và replay lại giá trị đó hoặc .next event cuối cùng của observable cho một Subscriber mới. Hãy cũng tìm hiểu ví dụ sau:

Chúng ta thu được kết quả

Subscriber vẫn nhận được “Emit 1” bởi tại thời điểm nó subscribe thì “Emit 1” chính là element cuối cùng trong Observable của subject nên subject đã replay lại element này cho subscriber.

ReplaySubject

Được khởi tạo với một kích thước bộ đệm và sẽ chứa số lượng các emit gần nhất bằng với kích thước bộ đệm đã khai báo. ReplaySubject sẽ replay lại tất cả các emit trong bộ đệm cho subscriber ngay khi subscriber đăng ký. Nó giống với Behavior Subject nhưng thay vì chỉ có thể lưu trữ event cuối cùng để bắn cho subscriber mới thì ReplaySubject có buffer size – số lượng event lưu trữ để bắn lại chó subscriber mới.

Kết quả sẽ là:

Variable

Lưu trữ dữ liệu hiện tại của BehaviorSubject như một state và replay duy nhất giá trị khởi tạo hoặc giá trị cuối cùng của dữ liệu cho subscriber mới.

Kết quả:

Kết luận & Tài liệu tham khảo

Như vậy mình đã giới thiệu về các loại subject cơ bản, mục đích và cách sử dụng chúng. Mong sẽ giúp đỡ các bạn trong viẹc tìm hiểu về RxSwift.

Refs: RxSwift: Reactive Programming with Swift by the raywendrich.com Tutorial Team

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo