- vừa được xem lúc

Bài 7. RxSwift – Relays

0 0 11

Người đăng: Nguyen Khai Hoan

Theo Viblo Asia

1. Khái niệm

Relay là thành phần mới được thêm vào RxSwift. Đi kèm với đó là khai tử đi Variable , một trong nhưng Class sử dụng rất nhiều trong các project với RxSwift.

Thứ nhất, Relay là một wraps cho một subject. Tuy nhiên, nó không giống như các subject hay các observable chung chung. Ở một số đặc điểm sau:

  • Không có hàm .onNext(_:) để phát đi dữ liệu

  • Dữ liệu được phát đi bằng cách sử dụng hàm .accept(_:)

  • Chúng sẽ không bao giờ .error hay .completed Ta có 2 loại Relay:

  • PublishRelay đó là warp của PublishSubject. Relay này mang đặc tính của PublishSubject

  • BehaviorRelay đó là warp của BehaviorSubject. Nó sẽ mang các đặc tính của subject này

2. Publish Relays

Create

import RxCocoa // dispose let disposeBag = DisposeBag() // error define enum MyError: Error { case anError } // relay let publishRelay = PublishRelay<String>()

Bạn sẽ có một đối tượng publishRelay thuộc class PublishRelay. Việc khởi tạo thì không cần cung cấp giá trị nào hết. Bạn cần phải cung cấp kiểu dữ liệu cho các phần tử được phát đi, trong trường hợp này là String.

Emit

publishRelay.accept("0")

Lần này, sẽ khác cách Subject emit dữ liệu đi. Bạn sử dụng .accept thay cho .onNext.

Subscribe

 // subcribe 1 publishRelay .subscribe { print("🔵 ", $0) } .disposed(by: disposeBag) // emits publishRelay.accept("1") publishRelay.accept("2") publishRelay.accept("3") // subcribe 2 publishRelay .subscribe { print("🔴 ", $0) } .disposed(by: disposeBag) // emit publishRelay.accept("4")

Output:

🔵 next(1)
🔵 next(2)
🔵 next(3)
🔵 next(4)
🔴 next(4)

Vẫn là function .subcribe() để đăng ký tới 1 Relay. Trong ví dụ này, subscriber sẽ nhận được các giá trị mới sau khi nó đăng ký. Còn subscribe2, chỉ nhận được giá trị 4 thôi.

Terminate

Bạn không thể kết thúc Relay được, vì chúng không hề phát đi error hay completed. Việc phát đi error & completed thì đều bị trình biên dịch ngăn cản.

 let test1 = publishRelay .subscribe { print("test1 ", $0) } // emits publishRelay.accept("1") publishRelay.accept("2") test1.dispose() publishRelay.accept("3")

Tương tự như Publish Subjects, khi subscribe gọi .dispose() thì cũng sẽ thì sẽ không nhận được các giá trị mà subject phát tiếp.

3. Behavior Relays

Create

let behaviorRelay = BehaviorRelay<String>(value: "0")

Class tạo ra 1 Relay này là BehaviorRelay. Tương tự, bạn phải cung cấp một giá trị cho value để làm giá trị khởi tạo ban đầu cho Relay này.

Emit

behaviorRelay.accept("0")

Subscribe

 // subcribe 1 behaviorRelay .subscribe { print("🔵 ", $0) } .disposed(by: disposeBag) behaviorRelay.accept("1") behaviorRelay.accept("2") behaviorRelay.accept("3") // subcribe 2 behaviorRelay .subscribe { print("🔴 ", $0) } .disposed(by: disposeBag) behaviorRelay.accept("4")

Output:

🔵 next(0)
🔵 next(1)
🔵 next(2)
🔵 next(3)
🔴 next(3)
🔵 next(4)
🔴 next(4)

Nhìn qua, nó cũng không khác các Observables & Subject. Và nó tuân theo đặc tính của Behavior Subject, sẽ luôn nhận được giá trị mới nhất khi có 1 Subscriber mới đăng ký tới.

Terminate

Tương tự như Publish Relays, khi subscribe gọi .dispose() thì cũng sẽ thì sẽ không nhận được các giá trị mà subject phát tiếp. Bạn không thể kết thúc Relay được, vì chúng không hề phát đi error hay completed. Việc phát đi error & completed thì đều bị trình biên dịch ngăn cản.

Value

Một điều đặc biệt của Behavior Relay là bạn có thể lấy được giá trị hiện tại được lưu trữ trong Relay. Cách lấy như sau:

 print("Current value: \(behaviorRelay.value)")

Output:

Current value: 4

.value chính là đặc tính mà để Behavior Relay thay thế Variable

Tham khảo: https://fxstudio.dev/rxswift-relays/

Bình luận

Bài viết tương tự

- vừa được xem lúc

2 Cách để Triển Khai MVVM Trong Dự Án IOS

MVVM không nhất thiết phải bind cùng RxSwift, nhưng nó sẽ tốt hơn, vậy tại sao . MVVM Cùng Swift. Để thực hiện hai cách ràng buộc mà không phụ thuộc, chúng ta cần tạo Observable của riêng chúng ta. Đây là đoạn code :.

0 0 84

- vừa được xem lúc

Refresh token và retry request sử dụng RxSwift

Đặt vấn đề. Trong các dự án iOS sử dụng authenticator, việc đăng nhập thường hay được sử dụng bằng access token sau khi đã đăng nhập thành công bằng tài khoản và mật khẩu.

0 0 39

- vừa được xem lúc

RxSwift: KVO - Key Value Observing

I. Khái niệm:.

0 0 46

- vừa được xem lúc

Observable là gì? Cách tạo ra Observable

RxSwift là một thư viện cho phép chúng ta sử dụng Swift một cách khác nhau. Với thư viện này, lập trình bất đồng bộ trở nên dễ thực hiện hơn và dễ đọc hơn.

0 0 83

- vừa được xem lúc

Bài 3. RxSwift – DisposeBag

1.DisposeBag và vấn đề. . Nếu Observable không kết thúc thì sao nào.

0 0 10

- vừa được xem lúc

Bài 2. RxSwift – Observables

1. Observables. Đây là phần trung tâm của RxSwift. Observable chính là trái tim của cả hệ thống.

0 0 15