22/03/2021, 08:40

RxSwift 8: Tạo observable factories

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Trong bài 7, chúng ta đã nghiên cứu cách dọn dẹp bộ nhớ cho các observables bằng disposing và những lưu ý để tránh rò rỉ bộ nhớ khi sử dụng chúng. Vẫn như mọi khi source code tham khảo bạn có thể tải tại đây: https://github.com/lexuanquynh/R ...

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

Trong bài 7, chúng ta đã nghiên cứu cách dọn dẹp bộ nhớ cho các observables bằng disposing và những lưu ý để tránh rò rỉ bộ nhớ khi sử dụng chúng. Vẫn như mọi khi source code tham khảo bạn có thể tải tại đây:

https://github.com/lexuanquynh/RxLearning

  6 ví dụ để bạn yêu luôn observable
  "Luật 5 giây" giúp Steve Jobs thách thức mọi giới hạn sáng tạo

Thay vì tạo mỗi observable để chờ đợi các subscribers đăng ký, chúng ta có thể tạo 1 factory observable sinh ra các observable cho mỗi lượt đăng ký mới của chúng.

Thêm đoạn code sau:

example(of: "deferred") {
      let disposeBag = DisposeBag()
    // 1
      var flip = false
      // 2
      let factory: Observable<Int> = Observable.deferred {
        // 3
    flip = !flip
    // 4
        if flip {
          return Observable.of(1, 2, 3)
    } else {
          return Observable.of(4, 5, 6)
        }
    }
  1. Tạo 1 biến đánh dấu flip gán giá trị false
  2. Tạo 1 factory observable kiểu nguyên bằng toán tử deferred
  3. Nghịch đảo flip, mỗi khi factory observable được đăng ký
  4. Trả về các Observale khác nhau tùy thuộc giá trị của flip

Thêm mã sau vào sau hàm trên:

for _ in 0...3 {
        factory.subscribe(onNext: {
            print($0, terminator: "")
        })
        .disposed(by: disposeBag)
        print()
    }

Kết quả như sau:

--- Example of: deferred ---
123
456
123
456

Vậy ta hiểu là, mỗi lần khi ta đăng ký tới factory observable, thì ta nhận các giá trị khác nhau của chúng theo thứ tự xen kẽ nhau. Điều này để thể hiện rằng factory observable có thể tạo ra các observable khác nhau cho các subscriber.

Vậy là bài hôm nay kết thúc rồi. Trong bài tiếp theo chúng ta sẽ tập trung thực hành các khái niệm chính của Rxswift. Cụ thể bài tới là về Subjects.

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

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

  • Retrofit là gì? Những kiến thức cần nắm về Retrofit trong Android
  • 6 ví dụ để bạn yêu luôn observable
  • Giới thiệu về Reactive Programing trong javascript

Xem thêm Việc làm Developer hấp dẫn trên TopDev

0