RxSwift - Phần bổ sung - Bài 1: Hot và Cold Observables
RxSwift
6
swift
62
ios
53
Male avatar

Bùi Khánh Duy viết ngày 30/06/2018

RxSwift - Phần bổ sung - Bài 1: Hot và Cold Observables

=====
Updated ngày 30/06

Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalog, mình mới dọn về nhà mới ở đây, thoải mái, đẹp đẽ rõ ràng hơn kipalog. Mong các bạn có thể theo dõi tại trang web của mình để cập nhật thêm nha

Mình mới viết một loạt bài về chủ đề Clean Architecture và Service Locator. Các bạn có thể theo dõi.
Page trên facebook ở đây: ở đây

=====
Đây là loạt bài song song với loạt bài chính. Mục đích của phần này là viết những bài bổ sung thêm kiến thức mà không làm ảnh hưởng đến trục chính mình đang viết bên RxSwift kia.

1. Hot and Cold Observables

  • “hot” Observable có thể bắt đầu phát ra events ngay khi nó được tạo ra và những observer mà bắt đầu subscribes có thể sẽ observer ở đâu đó đoạn giữa giữa tín hiệu. "hot" không cần subscribes vẫn phát được tín hiệu.
  • “cold” Observable thì lại chờ đến khi có ai đó lắng nghe mới phát tín hiệu, nên người quan sát có thể yên tâm rằng mình có thể thấy toàn bộ sequence từ lúc bắt đầu. "cold" cần subscribe mới chịu phát tín hiệu.

2. Dấu hiệu nhận biết

  • "hot" Observable là những thứ như UIButton.rx.tap, UITextField.rx.text mà có thể phát ra events kiểu Void khi 1 button đc tap hay kiểu String khi text field được nhập.
  • "cold" Observable là những thứ mà ta thường bỏ vào hàm Observable.create()

3. Thực tế mình gặp phải
Trước khi mình biết đến hot and cold, mình từng thắc mắc như sau: Observable sẽ không phát tín hiệu cho đến khi có ai đó subscribe nó, ví dụ: myObservable.subscribe(onNext: {}). Vậy tại sao trong đoạn code sau:

// in LoginViewModel.swift
init() {
isValid = Observable.combineLatest(username.asObservable(), password.asObservable()) { (username, password) in
return !username.isEmpty && !password.isEmpty
}
}
// in LoginViewController.swift
viewModel.isValid.bind(to: loginButton.rx.isEnabled).disposed(by: disposeBag)

thì tại sao isValids có thể được observed mà không phải gọi subscribe? Tại sao ta có thể gọi bind(to:) trong LoginViewController.swift mà không cần gọi kiểu .isValid.subscribe() ?

Giải thích:
Vấn đề của mình là do mình hiểu sai vấn đề. Với cả, ngay trong hàm bind(to: _) nó đã có subscribe bên trong nó.

alt text

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

Bùi Khánh Duy

9 bài viết.
21 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
4 0
Autolayout và lifecycle trong IOS 1. Lý thuyết: Trước hết, mình xin nói về một vài lifecycle trong swift để mọi người nhớ lại. Một câu hỏi phổ b...
Bùi Khánh Duy viết hơn 1 năm trước
4 0
Male avatar
2 0
Swift Closure: Bài 1: Closure cơ bản ===== Updated ngày 30/06 Updated một chút: Vì những bất tiện và không rõ ràng về thông tin của kipalog, mình...
Bùi Khánh Duy viết hơn 1 năm trước
2 0
Bài viết liên quan
White
4 2
RxSwift at Kabukiza Tech 11 Đây là bài phát biểu ngắn của mình tại (Link) vừa rồi về RxSwift. https://speakerdeck.com/dtvd/theintroductiontorxswi...
Vu Nhat Minh viết gần 3 năm trước
4 2
White
2 3
Xin chào mọi người. Mình xin chia sẽ một UILabel Helper nhỏ dùng trong truờng hợp cần tính chiều cao của UILabel để xác định "Show More" button có ...
DonDinh viết hơn 4 năm trước
2 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
9 bài viết.
21 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!