RxSwift: Bài 4 - Subjects (Part 3) - Variables
RxSwift
18
swift
51
White

Bùi Khánh Duy viết ngày 15/02/2018

RxSwift: Bài 4 - Subjects (Part 3) - Variables

1. Giới thiệu:
Như để cập ở Part 1, 1 Variable có các tính chất của BehaviorSubject và lưu trữ giữ liệu hiện tại của nó như là trạng thái hiện tại của nó.
Bạn có thể truy cập giá trị hiện tại này thông qua property "value" của nó. Và bạn cũng có thể sử dụng cái "value" này để nhập những element lên trên variable của nó. Nói cách khác, bạn không dùng onNext(_:).

Bởi vì nó có các tính chất của BehaviorSubject nên 1 Variable được tạo ra với 1 giá trị khởi tạo, và nó sẽ phát ra giá trị mới nhất hoặc giá trị ban đầu đến những subscribers mới của nó. Để truy cập vào 1 behavior subject bên dưới của Variable, bạn gọi asObservable() lên nó

Một tính chất khá đặc trưng của Variable so với những subject khác đó là nó được đảm bảo rằng sẽ không phát ra Error. Mặc dù bạn có thể lắng nghe .error events trong 1 subscription đến 1 variable, nhưng bạn không thể add 1 .error event lên trên 1 Variable. Ngoài ra, một variable cũng sẽ tự động kết thúc khi nó chuẩn bị deallocated, cho nên bạn không thể add .completed event vào nó.

2. Ví dụ cụ thể
Bạn xem dòng code sau:
alt text

Mình xin phân tích như sau:
1.Tạo 1 Variable với 1 giá trị khởi tạo. Variable có thể tự suy luận kiểu thông qua giá trị ban đầu nhưng bạn cũng có thể khai rõ ràng loại là gì, ví dụ như là Variable("Initial value").
2.Add một giá trị cho nó, là "new init value", bạn lưu ý các add lần này không còn add qua onNext nữa mà là add thông qua cái value.
3.Subscribe đến cái variable này bằng cách gọi asObservable() để truy cập vào behavior subject nằm bên trong của nó.

Kết quả như hình dưới, nó sẽ lấy giá trị mới nhất của nó:

 --- Example of: Variable ---
1) New initial value

Bây giờ ta add thêm đoạn code sau vào chỗ tiếp theo:
alt text

Phân tích một chút:
1.Ta add thêm giá trị mới vào variable.
2.Tạo thêm 1 subscription đến thằng variable này.
3.Add thêm một giá trị khác vào variable này.

Kết quả như sau:
alt text

Các bạn có đoạn được tại sao không? Cho các bạn 5p suy nghĩ, hết giờ. Bây giờ mình xin giải thích như sau.

Cái subscription hiện tại Sub01 nhận giá trị mới 1 từ Variable, không có gì khó hiểu vì nó đã subscribe nãy giờ. Còn đối với Sub02, nó vẫn nhận giá trị tương tự bởi vì đó là giá trị gần nhất. Sau đó cả hai đều nhận được giá trị 2, khi giá trị 2 này đã được add vào value của nó.

Không có cách nào để add .error hay .completed event vào variable, dù có cố thì compiler cũng báo lỗi nên ta sẽ không làm thử việc này để làm gì. Đây là một vài cách chữa cháy:

// These will all generate errors
variable.value.onError(MyError.anError)
variable.asObservable().onError(MyError.anError)
variable.value = MyError.anError
variable.value.onCompleted()
variable.asObservable().onCompleted()

Variables rất linh hoạt. Bạn có thể subscribe chúng như là observables để có thể react bất cứ khi nào có 1 new .next event xuất hiện, giống như các subject khác. Chúng còn có thể đáp ứng nhu cầu dùng lần rồi thôi như là khi bạn chỉ cần check giá trị hiện tại là đủ mà không cần phải subscribe gì cho phức tạp.

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

White

Bùi Khánh Duy

15 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
2 3
RxSwift: Bài 2 Subscribing to observables 1. Khái niệm Subscribe (đăng kí) đến một RxSwift observable khá giống như NotificationCenter, thay vì a...
Bùi Khánh Duy viết 9 ngày trước
2 3
White
2 0
RxSwift: Bài 3 Disposing and terminating 1. Đặt vấn đề: Nhắc lại là 1 observable sẽ không làm bất kì điều gì cho đến khi nó nhận một subscribe. C...
Bùi Khánh Duy viết 9 ngày trước
2 0
White
1 3
RxSwift: Bài 1 Observable và Just, Of, From Đôi lời: Mình viết loạt bài này không phải là loạt bài tut, nó chỉ là những kiến thức mình tự hiểu và ...
Bùi Khánh Duy viết 9 ngày trước
1 3
Bài viết liên quan
White
0 0
RxSwift: Bài 6: RxCocoa (Part 4) Units 1. Khái niệm chung RxCocoa cung cấp nhiều tính năng mới để làm việc với Cocoa và UIKit 1 cách dễ dàng hơn....
Bùi Khánh Duy viết 18 giờ trước
0 0
White
0 0
RxSwift: Bài 6: RxCocoa (Part 5) Disposing with RxCocoa 1. Giới thiệu Phần này chủ yếu là lý thuyết. Như đã giải thích, có 1 cái bag ở bên trong ...
Bùi Khánh Duy viết 17 giờ trước
0 0
White
0 0
RxSwift: Bài 5 Observables and Subjects in Practice (Part 1) Đến bài này, có lẽ mn đã hiểu observables và các loại subjects. Tuy nhiên thực tế để ...
Bùi Khánh Duy viết 7 ngày trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
15 bài viết.
0 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á!