RxSwift 9: Subjects

Công Nghệ
RxSwift 9: Subjects
Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Trong bài 8, chúng ta đã biết cách tạo 1 observable factory, biết cách tạo nhiều loại observable khác nhau cho các subscribers. Từ 8 bài, bạn đã nắm chắc được 1 observable là gì, cách tạo ra...

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh

Trong bài 8, chúng ta đã biết cách tạo 1 observable factory, biết cách tạo nhiều loại observable khác nhau cho các subscribers.

Từ 8 bài, bạn đã nắm chắc được 1 observable là gì, cách tạo ra nó, cách đăng ký tới nó, và giải phóng khi nó hoàn thành. Observables là 1 phần cơ bản của RxSwift, nhưng nhu cầu cơ bản của phát triển ứng dụng là thêm thủ công các giá trị tới observable trong thời gian thực, sau đó gửi(emited) tới các subscribers. Những gì bạn muốn đồng thời là observable và observer. Và thứ đó được gọi là Subjects.

Trong bài này, chúng ta sẽ tìm hiểu sự khác nhau giữa các loại subject, cách nó làm việc và dùng nó trong trường hợp cụ thể nào.

Để bắt đầu, chúng ta tạo đoạn code thử nghiệm sau:

example(of: "PublishSubject") {
  let subject = PublishSubject<String>()    
}

Các bạn có thể tải code tham khảo tại:

https://github.com/lexuanquynh/RxLearning/tree/master/RxLearning/Playground/SubjectPlayground.playground

Trong đoạn code trên, chúng ta vừa tạo 1 PublishSubject. Giống như tên gọi, nó sẽ nhận các thông tin sau đó chuyển thông tin tới các subscribers, có thể sửa đổi thông tin trước khi chuyển. Nó thuộc kiểu String, vì vậy nó chỉ có thể gửi và nhận kiểu String. Sau khi được khởi tạo, nó sẵn sàng gửi và nhận String.

Thêm tiếp đoạn code sau vào ví dụ trên:

subject.onNext("Co ai nghe tui noi khong?")

Chúng ta vừa đặt 1 string vào subject, tuy nhiên chưa in ra gì cả vì chưa có subscriber nào đăng ký. Để tạo 1 subscriber, chúng ta thêm tiếp đoạn code sau:

let subscriptionOne = subject
  .subscribe(onNext: { string in
    print(string)
  })

Bạn vừa tạo 1 subscriber, nhưng vẫn chưa có gì hiển thị cả. Chính xác là khi subscriptionOne tạo ra, thì thông điệp onNext đã gửi trước đó, cho nên nó sẽ không nhận được nữa. Bây giờ thử thêm tiếp đoạn code sau vào dưới chương trình:

subject.on(.next("1"))

Kết quả như sau:

--- Example of: PublishSubject ---
1

Vì subscriptionOne đã tạo, cho nên khi 1 string phát ra từ PublishSubject, nó sẽ nhận được và hiển thị ra màn hình.

Vậy Subjects là gì?

Subjects đóng vai trò vừa là observable và observer. Nó có thể nhận sự kiện và gửi nó tới subscribers. Như chúng ta thấy, nó nhận sự kiện ở onNext, và đồng thời gửi chúng tới các subscribers. Có 4 loại subjects thường thấy:

  1. PublishSubject: Khởi tạo rỗng, và chỉ phát các phần tử cho các subscriber đã đăng ký với nó.
  2. BehaviorSubject: Khởi tạo với 1 phần tử ban đầu, và phát các phần tử mới nhất cho các subscriber đã đăng ký với nó.
  3. ReplaySubject: Khởi tạo với 1 dãy phần tử ban đầu, và phát lại toàn bộ các phần tử đó cho các subscriber đăng ký tới nó.
  4. Variable: Wrap 1 BehaviorSubject, giữ nguyên giá trị hiện tại của nó dưới dạng trạng thái, và chỉ phát lại giá trị mới nhất/ ban đầu cho các subscribers đăng ký mới. (Lưu ý: dạng này đã không còn dùng trong các phiển bản Rxswift mới nữa).

Vậy các subjects hoạt động như nào, chúng ta hãy tiếp tục theo dõi bài 10 nhé!

Bài viết gốc được đăng tải tại codetoanbug.com

Có thể bạn quan tâm:

Xem thêm IT job hấp dẫn trên Station D

Bài viết liên quan

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Kết quả từ cuộc khảo sát đầu năm của Station D về lương bổng của lập trình viên cho thấy nhiều thay đổi đã và đang diễn ra trong ngành IT – cuộc khảo sát tập trung vào các câu hỏi về khối lượng công việc, triển vọng cũng như...

By stationd
Đâu chỉ mỗi Bitcoin, công nghệ Blockchain còn nhiều ứng dụng hơn thế!

Đâu chỉ mỗi Bitcoin, công nghệ Blockchain còn nhiều ứng dụng hơn thế!

Khi nhắc đến blockchain , lập tức mọi người thường nghĩ ngay đến các loại tiền mã hóa, chẳng hạn như bitcoin. Tuy nhiên, blockchain lại là công nghệ tạo ra tiền mã hóa nhưng bản thân công nghệ này không phải là tiền mã hóa như cách mà chúng...

By stationd
Mock phương thức static trong Unit Test sử dụng PowerMock

Mock phương thức static trong Unit Test sử dụng PowerMock

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong bài viết này, mình sẽ hướng dẫn các bạn Mock các phương thức static trong Unit Test các bạn nhé! Nếu bạn nào chưa biết về Mock trong Unit Test thì mình có thể nói sơ qua...

By stationd
Cảnh Báo Malware Giả Mạo Hợp Đồng Việc Làm: Tập Tin .EXE Nguy Hiểm Đội Lốt PDF/Word

Cảnh Báo Malware Giả Mạo Hợp Đồng Việc Làm: Tập Tin .EXE Nguy Hiểm Đội Lốt PDF/Word

Kẻ xấu đang lợi dụng nhu cầu tìm việc để phát tán phần mềm độc hại (malware) dưới dạng tệp 'hợp đồng' giả mạo. Hãy cảnh giác với những file có icon Word/PDF nhưng thực chất là .exe. Nếu mở, máy tính của bạn có thể bị đánh cắp toàn bộ thông tin cá nhân, cookie và mật khẩu.

By admin