Nếu bạn là một lập trình viên iOS thì bạn hẳn đã nghe về RxSwift, hay gọi đầy đủ là phiên bản Swift của lập trình   Reactive. RxSwift là một công cụ tuyệt vời và cực kì hiệu quả, tuy nhiên đối với nhiều lập trình viên, thì đây vẫn là một   điều khá mới mẻ và xa lạ. Loạt bài này sẽ giúp các bạn có một cái nhìn tổng quan nhất về RxSwift nói riêng và lập trình   Reactive nói chung.

 Từng phần của loạt bài viết này sẽ nói về những thành phần cơ bản của RxSwift như sau:


- Observables & Observers
- Subject
- Operators
- Schedulers

Observables & Observers:

 

 
“ Như trong tấm hình minh họa, ta có thầy giáo tức Event A có vai trò "phát, truyền" ra kiến thức, hay là data cho hai học sinh ở dưới là Event B và Event C "tiếp nhận, hứng lấy" chúng. Ở đây chúng ta gọi người thầy giáo là  “Observable” hoặc “Observable sequences” và hai người học sinh là “Observers” .”

Ở trên là định nghĩa đơn giản nhất về Observable và Observer, hai thành phần quan trọng nhất trong RxSwift. Observable data có thể truyền vào cho nhiều đối tượng khác nhau. Và các Observer có thể nhận toàn bộ các instance trên một cách lần lượt. 

 

Hãy cùng xem đoạn code ví dụ sau:

let observableA = Observable.of(1,2,3,4,5,6)  // Creating Observable
let observerB = myFirstObservable.asObservable() 
// Subscribe to Observable
observerB.subscribe { event in
print(event)
}
Output:
next(1)
next(2)
next(3)
next(4)
next(5)
next(6)
completed

Ở đây chúng ta thấy Observer B đang hứng dữ liệu liên tiếp từ A, tương tự như với Observer C & D.  Và tiếp theo chúng ta sẽ tìm hiểu về các trạng thái "next" và "completed" ở đoạn code trên, Observable bao gồm 3 event chính đó là:

-Next
-Error
-Completed

ở đây chúng ta cần lưu ý 2 điều như sau: 

(1) Khi một observable nhả một luồng dữ liệu, mỗi một thành phần trong đó được gói trong một event Next. Ở ví dụ trên chúng ta có thể thấy Observable A nhả dữ liệu 6 lần, và observer sẽ hứng từng event Next đó lần lượt.

(2) Khi Observer kết thúc việc nhả dữ liệu ở từng event Next, nó sẽ kết thúc với trạng thái complete hoặc error.

--1--2--3--4--5--6--| // Completed
--1--2--3--4--X // Error

 

// Observe Just 1 element
let observableOfJust = Observable.just("SWIFT")
observableOfJust.subscribe { event in
print(event)
}
Output:
next(SWIFT)
completed
...............................................................
// Observe an Array
let observablOfArray = Observable.of(["Ronaldo", "Messi", "Neymar"])
// You can also write next event like this
  observablOfArray.subscribe(onNext: { (arr) in
      print(arr)
   })
Output:
["Ronaldo", "Messi", "Neymar"]
...............................................................
// Observe sequence of Data 
let observableOfSequence = Observable.of("Ronaldo", "Messi", "Neymar")
observabl5.subscribe(onNext: { (str) in
print(str)
}, onError: { (error) in
print("I will execute if any error Occurs")
}, onCompleted: {
print("Completed Successfully")
})
Output:
Ronaldo
Messi
Neymar
Completed Successfully

 

Một điều rất quan trọng nữa đó lá khi chúng ta làm những project thật, thì việc quản lý bộ nhớ là việc tối thiểu cần phải làm. Do vậy, Observable hay RxSwfift  có một thành phần không thể thiếu đó là “Dispose Bags”. Khi observables kết thúc công việc của nó, chúng ta cần phải giải phóng toàn bộ các tài nguyên đã được sử dụng để tránh dẫn đến memory leak.

// Continue with the above example
let disposeBag = DisposeBag()
let observableOfSequence = Observable.of("Ronaldo", "Messi", "Neymar")
observabl5.subscribe(onNext: { (str) in
print(str)
}, onError: { (error) in
print("I will execute if any error Occurs")
}, onCompleted: {
print("Completed Successfully")
})
.disposed(by: disposeBag)

Như vậy là qua hai ví dụ trên, tôi đã giới thiệu cho các bạn tổng quan về Observable và Observer cũng như các event cơ bản liên quan. Và để nắm rõ được thì tôi có một bài tập nho nhỏ dưới đây, hãy subcribe tới sự kiện mỗi khi chế độ màn hinh của thiết bị thay đổi và in ra trạng thái tương ứng.

 

Ở phần tiếp theo, chúng ta sẽ tìm hiểu về  Subjects và Operators.

Nguồn bài viết: https://medium.com/@kishannakum/reactive-programming-in-swift-part-1-48bfc9062d1b 

Khóa học lập trình di động tại Techmaster:

Để cài đặt MacOSX lên phần cứng không phải Apple liên hệ chuyên gia cài Hackintosh:

  • Nguyễn Minh Sơn: 01287065634
  • Huỳnh Minh Sơn: 0936225565
  • Website: caidatmacos.com