Subject là gì và cách khởi tạo các Subject trong RxSwift

Giới thiệu RxSwift là 1 phiên bản mở rộng của Reactive, nó là sự kết hợp Observer, Iterator, Functional Programing, nó giúp chúng ta có thể phản ứng với những thay đổi dữ liệu và chúng ta không cần phải gọi trực tiếp đến nó. Giúp công việc của chúng ta trở nên dễ dàng

Giới thiệu

  • RxSwift là 1 phiên bản mở rộng của Reactive, nó là sự kết hợp Observer, Iterator, Functional Programing, nó giúp chúng ta có thể phản ứng với những thay đổi dữ liệu và chúng ta không cần phải gọi trực tiếp đến nó. Giúp công việc của chúng ta trở nên dễ dàng hơn và hạn chế sử dụng Notification hay là Delegate kết hợp với những block code và các câu lệnh phức tạp.

  • Đó là về phần giới thiệu tổng quan về RxSwift, bây giờ vào chủ đề chính ngày hôm nay mình sẽ giới thiệu với các bạn về 1 phần quan trọng trong RxSwift là Subject và cách khởi tạo các Subject.

Subject là gì?

  • Trước khi đi tới định nghĩa về Subject thì mình muốn làm rõ về 2 khái niệm sau:

    1. Observable: là nguồn phát dữ liệu và chịu trách nhiệm emit các dữ liệu cho các cho các đối tượng đăng kí tới
    2. Observer: là nơi nhận và chịu trách nhiệm xử lý dữ liệu nhận được
  • Kết hợp của cả 2 khái niệm trên chúng ta sẽ có được là Subject nó vừa hoạt động như là Observable và vừa hoạt động như là Observer. Khi mà subject vừa onNext thì sẽ ngay lập tức emit dữ liệu đi đến các subscriber của nó, mình xin giới thiệu các loại Subject sau đây

PublishSubject

  • Là 1 loại Subject và khi khởi tạo thì không cần phải cung cấp giá trị ban đầu cho nó

  • Các giá trị được emit trước lúc subscriber đăng kí tới thì sẽ không nhận được, subscriber chị nhận được các giá trị mà emit sau khi đăng kí

  • Khi mà subject kết thúc complete hay error thì các subscriber mới đăng kí tới chỉ nhận được complete hay error

BehaviorSubject

  • Là 1 loại subject và khác với Publish thì Behavior phải cung cấp giá trị khởi tạo ban đầu cho subject
  • Khi mà subscriber đăng kí tới thì sẽ luôn nhận được giá trị mới nhất từ subject
  • Khi subject kết thúc complete hay error thì các subscriber mới đăng kí tới chỉ nhận được complete hay error

ReplaySubject

  • Là 1 loại subject và khởi tạo bằng kích thước của bộ đệm
  • Nó sẽ phát lại các value đã phát cho subscriber đăng kí tới nó và số lượng value phát lại bằng với kích thước của bộ đệm
  • Khi mà chúng ta kết thúc complete hay error thì subsciber đăng kí tới vẫn sẽ nhận được value từ trong bộ đệm đó và sau đó sẽ nhận complete hoặc error
  • Chúng ta muốn khi kết thúc khi subscriber mới đăng kí tới chỉ nhận được complete hoặc error thôi thì chúng ta sẽ sử dụng operator .dispose() để có thể xoá hết các value ở trong bộ đệm

Relays

  • Relay được ra mắt để thay thế Variable ở phiên bản cũ thì nó là 1 wrap subject tuy nhiên nó không giống với subject hay là observable ở 1 số điểm sau:

    • Thứ nhất là nó không có onNext khi muốn emit chúng ta sử dụng accept để emit đi
    • Thứ hai là nó không bao giờ error hay complete
    • Khi sử dụng Relay thì chúng ta phải import thêm RxCocoa để sử dụng
  • Relay có 2 loại liên quan tới 2 subject khác đó là:

    • PublishRelay: là 1 wrap của PublishSubject nó mang đặt tính của PublishSubject

    • BehaviorRelay: là 1 wrap của BehaviorSubject nó mang đặt tính của BehaviorSubject

Kết thúc

  • Thì đây cũng là kết thúc bài viết của mình, mình hi vọng qua bài viết này các bạn có thể hiểu hơn về các subject và cách khởi tạo của mỗi subject, chúc các bạn 1 ngày tốt lành.

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ