RxSwift: Bài 4 - Subjects (Part 3) - Variables
RxSwift
20
swift
71
Male avatar

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

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

=====
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

=====
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

Male avatar

Bùi Khánh Duy

29 bài viết.
15 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
4 3
RxSwift: Bài 1 Observable và Just, Of, From ===== 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 kipalo...
Bùi Khánh Duy viết 10 tháng trước
4 3
Male avatar
4 0
Autolayout và lifecycle trong IOS ===== 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ớ...
Bùi Khánh Duy viết 8 tháng trước
4 0
Male avatar
2 3
RxSwift: Bài 2 Subscribing to 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,...
Bùi Khánh Duy viết 10 tháng trước
2 3
Bài viết liên quan
White
11 4
(Link) (Link) (Link) Ở 2 phần tut trước, mình đã hướng dẫn khá chi tiết cách viết một ứng dụng camera có tích hợp chức năng nhận diện khuôn mặ...
HoangPH viết hơn 3 năm trước
11 4
Male avatar
0 0
RxSwift: Bài 6: RxCocoa (Part 4) Units ===== 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ì...
Bùi Khánh Duy viết 10 tháng trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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