Contents

  • Observable là gì?
  • Các loại event
  • Khởi tạo Observable
  • Subcribe
  • Create Observable

Observable là gì?

  • Observable là phần quan trọng nhất của RxSwift. có thể coi nó như 1 sequence, có tác dụng phát ra (emit) các event, và các object khác có thể lắng nghe những event đó.
  • Các event có thể đính kèm các giá trị với các kiểu dữ liệu quen thuộc như Int, String, … hay các kiểu dữ liệu mà bạn tự tạo ra.
Hình trên là ví dụ cho các event 1, 2 ,3 lần lượt được emit ra theo thời gian.

Các loại Event:

Các event được emit ra thuộc 1 trong 3 loại:

  • next: Khi 1 Observable emit 1 element, thì nó được coi là 1 next event. Next event có thể đính kèm giá trị, và Observable có thể emit nhiều next event trong 1 life cycle của nó.
  • completed: Khi Observable hoàn thành việc emit event của mình, thì nó sẽ emit ra event completed và tự động terminate.
  • error: Khi Observable gặp lỗi trong quá trình emit event, thì nó sẽ emit ra event error và tự động terminate.

Note:
Tóm gọn lại, Observable có thể phát ra nhiều next event trong 1 life cycle; ngược lại thì Observable chỉ có thể phát ra 1 event complete hoặc error, sau đó sẽ tự hủy và không phát ra bất cứ event nào nữa.

Khởi tạo Observable:

of:

let observable = Observable.of(1,2,3)
let observable2 = Observable.of([4,5,6])
  • Khởi tạo bằng func of cùng với các giá trị khởi tạo.
  • Cho mỗi next event, Observable sẽ lần lượt emit ra các element được cung cấp.
  • Các giá trị cung cấp phải cùng kiểu dữ liệu: Cùng Int, String, …
Sau khi phát ra hết các element, observable sẽ emit ra completed event và terminate.

from:

let observable = Observable.from([1,2,3])
  • Khi khởi tạo 1 Observable bằng func from, thì giá trị được khởi tạo mặc định phải thuộc kiểu Array.
  • Cho mỗi event next, Observable sẽ lần lượt emit ra các giá trị trong mảng.

Sau khi emit hết các phần tử trong mảng, observable sẽ emit ra event completed và terminate.

Ngoài of và from, thì còn các cách khởi tạo khác như just, never, empty.

create:

  • Với các cách ở trên, thì observable sẽ tự động emit các event được cung cấp sẵn 1 cách lần lượt và tự emit 1 complete sau khi hoàn thành.
  • Bằng cách sử dụng hàm create để tạo 1 Observable, bạn có thể custom Observable theo cách riêng của ban để có thể emit ra completed hoặc error bất cứ khi nào bạn muốn
let observable = Observable<String>.create({ observer in
    observer.onNext("Global")
    observer.onNext("Smart")
    observer.onCompleted()
    observer.onNext("Technology")
    return Disposables.create()
})

Kết quả được in ra: (Sau khi emit ra event complete thì observable sẽ bị terminate, do đó nó sẽ không emit ra "Technology" nữa.

Subcribe:

Chỉ copy đoạn code ở trên và run thì bạn sẽ không thấy có gì được print ra màn hình cả. Tại sao vậy?

1 Observable chỉ có thể emit ra event khi nó được subcribe.

Đoạn code ở trên, ta chưa subcribe Observable đó.Vậy làm thế nào để subcribe 1 Observable?

subcribe event

Để subcribe tới 1 Observable thì vô cùng đơn giản với hàm subcribe:

let observable = Observable.of(1,2,3)
observable.subscribe { (value) in
    print(value)
}

Để í phần Summary của hàm subcribe này: Đó là hàm có tác dụng subcribes 1 event. Vì vậy, các giá trị được print ra sẽ có cả kiểu của event được emit ra (next/complete/error).

Kết quả print ra trên màn hình:

Vậy nếu bạn muốn chỉ print ra giá trị của value mà không cần print ra kiểu event?

subcribe element

  • Cách 1: Mỗi event sẽ có thuộc tính element để lấy ra giá trị đính kèm với event đó.
observable.subscribe { (value) in
    if let element = value.element {
        print(element)
    }
}
  • Cách 2: Sử dụng hàm subcribe:
observable.subscribe(onNext: { (element) in
    print(element)
})

Theo như summary, hàm subcribe này sẽ subcribe đến element, vì vậy nó sẽ chỉ in ra giá trị của element.
Cả 2 cách đều cho 1 kết quả như sau:

Ngoài ra , với hàm trên, bạn có thể thực hiện các hành động khi observable emit ra event completed, error, … như sau:

let observable = Observable<String>.create({ observer in
    observer.onNext("Global")
    observer.onNext("Smart")
    observer.onCompleted()
    observer.onNext("Technology")
    return Disposables.create()
}).subscribe(onNext: { (element) in
    print(element)
}, onCompleted: {
     print("Completed")
})

Kết luận:

Observable là 1 thứ đơn giản nhưng vô cùng quan trọng trong RxSwift.

Tham khảo: RxSwift – Reactive Programming with Swift v1.1

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.