Khái niệm cơ bản về RxSwift trong 10 phút (Part 1)
TIL
612
White

Trương Tuấn Quang viết ngày 17/07/2018

Khái niệm cơ bản về Rx

Tất cả các lập trình viên có lẽ đều đã nghe về Rx, trong các hội thảo hay là một bài viết được chia sẻ trên một trang blog nào đó. Bạn gần như có thể nghe về nó ở khắp mọi nơi, nhưng bạn đã thật sự biết lập trình Reactive Programming? có nghĩa là gì.
Đây là khái niệm mình tìm kiếm trên Internet :)

In computing, reactive programming is a programming paradigm oriented around data flows and the propagation of change. This means that it should be possible to express static or dynamic data flows with ease in the programming languages used, and that the underlying execution model will automatically propagate changes through the data flow. — Wikipedia

Do đoạn này dịch ra ảo quá. Nên các bạn có thể đọc và cố gắng hiểu theo cách hiểu của bản thân nhé :)

Cơ bản là chắc hầu hết mọi người khi đọc xong có lẽ cũng chưa hình dung được lập trình Reactive Programming thực chất là gì. Bởi vậy mà bài viết này tôi sẽ cố gắng đưa ra những ví dụ đơn giản, dễ hiểu để bạn có thể tiếp cận với Reactive Programming một cách dễ dàng nhất. Và ngôn ngữ tôi sử dụng ở đây là Swift - RxSwift

Cá nhân: Để thực sự hiểu thêm các ví dụ dưới đây. Thì mình hi vọng các bạn đã hiểu cái khái niệm cơ bản Swift. Hoặc bạn có thể tìm đọc cuốn The Swift Programing Language.

alt text

1. Observable Sequences

Điều đầu tiên các bạn cần hiểu là mọi thứ trong RxSwift đều là các observable sequence hoạt động trên hoặc đăng ký các sự kiện được phát ra bởi observable sequence

Arrays, Strings hoặc Dictionaries đều được chuyển thành observable sequences trong RxSwift. Bạn có thể khởi tạo một observable sequence với một Object bất kỳ có định dạng là Sequence Protocol.

Ví dụ:

let helloSequence = Observable.just("Hello Rx")

let fibonacciSequence = Observable.from([0,1,1,2,3,5,8])

let dictSequence = Observable.from([1:"Hello",2:"World"])

Sau khi đã khởi tạo các observable sequence thì để đăng ký nhận dữ liệu từ các observable sequence. Bạn sẽ sử dụng cú pháp sau.

subscribe(on:(Event<T>)-> ()).

let helloSequence = Observable.of("Hello Rx")

let subscription = helloSequence.subscribe { event in
    print(event)
}

OUTPUT: 
next("Hello Rx") 
completed

Các Observable sequences thì có thể không phát hoặc phát là nhiều sự kiện trong suốt vòng đời tồn tại của mình. Trong RxSwift, mỗi một Enumeration Type thì chỉ có thể là một trong 3 thạng thái sau:

  • .next(value: T) — Khi một giá trị hoặc một tập hợp các giá trị được thêm vào observable sequence. Nó cũng sẽ gửi các giá trị này tới các * subscribers * đã subscribe trước đó.

  • .error(error: Error) — Nếu gặp lỗi, một sequence sẽ phát ra một sự kiện lỗi . Và sequence này cũng sẽ bị hủy.

  • .completed — Nếu một sequence kết thúc, nó cũng sẽ gửi một sự kiện kết thúc tới các subscribers.

Bạn hãy xem ví dụ sau:

let helloSequence = Observable.from(["H","e","l","l","o"])

let subscription = helloSequence.subscribe { event in
  switch event {
      case .next(let value):
          print(value)
      case .error(let error):
          print(error)
      case .completed:
          print("completed")
  }
}

OUTPUT:
H e l l o 
completed

Nếu bạn muốn tự động hủy các sự kiện đã đăng ký với một sự kiện cụ thể. Ví dụ như onNext hoặc onError. Bạn có thể sử dụng DisposeBag. Xem đoạn code sau nhé.

let bag = DisposeBag()

let observable = Observable.just("Hello Rx!")

let subscription = observable.subscribe (onNext:{ 
    print($0)
})

subscription.addDisposableTo(bag)

Nguồn dịch: https://medium.com/ios-os-x-development/learn-and-master-%EF%B8%8F-the-basics-of-rxswift-in-10-minutes-818ea6e0a05b

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

Trương Tuấn Quang

8 bài viết.
21 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
18 6
Mở đầu Hồi đầu tiên bắt đầu tìm hiểu Python, đó là việc sử dụng nó để scraping dữ liệu từ những trang web khác nhưng bị em Python tán tính mạnh qu...
Trương Tuấn Quang viết hơn 2 năm trước
18 6
White
13 3
(Ảnh) Agile là gì ?, Scrum là gì ?. Hẳn có rất nhiều bạn nghe đến khái niệm này. Liệu Agile và Scrum có phải là một ?. Bài viết này mình sẽ đi vào...
Trương Tuấn Quang viết gần 2 năm trước
13 3
White
12 1
1. Division operator Nếu bạn đang có một công việc nâng cấp phiên bản Python, vậy hãy chú ý tới phép chia. Xem ví dụ sau đây nhé. Python print 7 ...
Trương Tuấn Quang viết hơn 2 năm trước
12 1
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 2 tháng trước
0 2
White
19 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 2 năm trước
19 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 1 năm trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
8 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á!