RxSwift 8: Tạo observable factories

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

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.

2 bình luận về “RxSwift 8: Tạo observable factories”

Viết một bình luận