#1 Dasar Rx Swift: Berkenalan dengan Rx Swift dan Observable

Galang Aji Susanto
5 min readDec 4, 2022

--

Photo by Maxwell Nelson on Unsplash

Hallo guys, bertemu lagi dengan saya Galang as a mobile tech entusiast pada tulisan pertama dalam series belajar Rx Swift Dasar. Artikel ini saya tuliskan untuk membagikan pengalaman dan pemaham yang telah saya dapatkan selama belajar Rx Swift. Semoga bisa bermaanfaat dan menjadi referensi kalian yang ingin mempelajari lebih dalam Rx Swift dalam bahasa Indonesia, karena saya lihat artikel dalam bahasa Indonesia sangatlah sedikit. Take a breath and a cup of cofee. let’s get started!

Apa itu Rx Swift dan Kenapa Kita Belajar Rx Swift?

Sebelum membelajari lebih dalam apa itu Rx Swift sebaiknya kita memahami terlebih dahulu apa itu yang dimaksud dengan Rx (Reactive). Berdasarkan yang saya pahami Rx itu reactive terhadap perubahan.

Dengan Rx kita bisa mengirimkan (broadcast) dan mengetahui perubahan (subcribe) data / event dari sebuah observable stream (urutan data yang bisa diketahui perubahannya).

Sehingga nantinya kita bisa melakukan langkah selanjutnya apabila terjadi perubahan data. Seperti memberitahukan kepada pengguna, menampilkan data yang terbaru, mengolah data tersebut terlebih dahulu sebelum ditampilkan ke pengguna dan banyak hal bisa di lakukan oleh Rx ini.

Sebenarnya kita telah menggunakan konsep Rx dalam kehidupan sehari-hari secara tidak sadar. Contoh ilustrasi yang paling mudah dipahami adalah ketika kita men subcribe channel youtube seseorang dan menyalakan lonceng notifikasinya. Pada contoh ini apabila kreator favorit kita mengunggah video, kita akan mendapatkan notifikasi. Langkah selanjut apa? kita bisa mengabaikan notifikasi tersebut atau menekan notifikasi tersebut sehingga kita akan dibawa pada video terbaru yang di upload kreator tersebut.

Rx ini sebenarnya adalah konsep umum yang bisa diterapkan dalam bahasa apapun seperti java, javascript, dart, swift dan lain sebagainya. Rx Swift sendiri merupakan impelementasi standar Rx (Reactive) pada bahasa pemrograman Swift.

Menurut saya pribadi ada beberapa keuntungan yang bisa kita dapatkan apabila ingin belajar lebih dalam tentang Rx Swift diantaranya.

Rx merupakan sebuah konsep yang bisa berlaku cross platform / unum dalam bahasa pemrogramman apapun. Sehingga apabila kita telah belajar tentang Rx Swift, apabila ada kebutuhan menerapkan Rx di bahasa pemrogaman lain seperti Java atau Dart kita akan lebih cepat beradaptasi karena memiliki konsep yang hampir sama.

Dengan menggunakan Rx swift kita bisa menyelesaikan persoalan yang rumit dengan cara sederhana. Contohnya ketika kita ingin mengirimkan sebuah data ke halaman lain, menyederhanakan logic di sebuah form, menyederhanakan logic di sebuah perhitungan dan menampilkan data yang terbaru.

Special case untuk kamu yang ingin memperdalam iOS development dengan menggunakan Rx Swift. Terdapat library yang sangat keren bernama Rx Cocoa merupakan extension reactive dari UIkit yang akan sangat mempermudah kita dalam berkomunikasi dengan komponen UIkit. Hal ini kan sangat mengurangi line of code yang kita punya.

Quotes from my mentor adalah Tidak ada salahnya untuk belajar hal baru. Mungkin yang kita pelajari sekarang terlihat sia-sia karena akan library lain yang lebih baru dan kereen seperti combine yang bisa menyelesaikan masalah yang sama dengan Rx Swift. Namun yakinlah meskipun kita tidak menggunakannya lagi di kemudian hari, kita akan berterimakasih telah belajar Rx Swift dari sekarang. At least akan memperluas pandangan dan wawasan kita tentang solusi apa saja yang bisa kita ambil dalam menyelesaikan sebuah permasalahan.

Apa itu Observable?

Terdapat jargon yang menarik yaitu The Hearth of Rx Swift is Observable. Terdengar tidak asing ya haha terutama untuk kalian yang belajar flutter juga terdapat jargon serupa yaitu Everything is A Widget. Oleh karena itu observable wajib kita pelajari karena merupakan inti dari Rx Swift.

Observable adalah sequence atau urutan dari data atau event dimana kita bisa mengetahui perubahan (subscribe) dan melakukan operasi sepeti filter dan transformasi. Hal yang tidak kalah penting lainnya adalah observable bisa menerima data secara asyncronus.

Perhatikan diagram marble di bawah untuk menambah pemahaman kamu tentah observable.

Tanda panah disini merepresentasikan waktu dimana selama periode waktu tersebut terjadi beberapa event. Bulatan angka disini merupakan data atau event yang terjadi di observable atau sequence tersebut.

Bagaimana Cara Membuat Observable?

just membuat sebuah observable yang berisi satu individual element saja di dalamnya.

of membuat sebuah observable yang dapat berisi array dari individual element atau individual element.

from membuat observable berisi individual element dari sebuah array.

Contohnya:

let observable1 = Observable.just(1)

let observable2 = Observable.of(1,2,3,4,5)

let observable3 = Observable.of([1,2,3,4,5])

let observable4 = Observable.from([1,2,3,4,5])

Perhatikan observable3 dan observable4, penggunaan operator of dan from sangatlah berbeda . of akan menghasilkan observable dengan type Observable<[Int]> sedangkan from akan menghasilkan observable dengan type Observable<Int>.

Cara Melakukan Subscribe ke Observable?

Kita telah mengetahui bahwa tujuan kita melakukan subscribe ke sebuah observable adalah untuk mengetahui event apa saja yang terjadi pada observable tersebut. Variable yang melakukan subscribe disebut dengan observer. Observable tidak akan mengirim event apa pun sampai adanya observer.

Terdapat 3 event yang bisa dikirim oleh observable yaitu:

onNext. Method ini dipanggil ketika kita mengemits sebuah data kepada observable. Observer akan menerima sebuah event onNext apabila ada data baru yang dimasukan ke dalam sebuah observer.

onError. Method ini dipanggil apabila terjadi kesalahan atau kegagalan dalam membuat data yang diharapkan. Method ini akan menyebabkan terminate sebuah observable sehingga tidak bisa menerima onNext event atau onCompleted event lagi.

onCompleted. Method ini dipanggil ketika semua data telah dikirim ke observable dan akan mengirimkan completed event ke observernya. Sehingga apabila method ini dipanggil tidak akan bisa menerima onNext event lagi

var observable = Observable.of(1,2,3,4,5)

observable.subscribe(onNext: { (element) in
print("Element : \(element)")
}, onError: { (err) in
print("Error \(err.localizedDescription)")
}, onCompleted: {
print("Completed")
})

Outputnya:

Element : 1
Element : 2
Element : 3
Element : 4
Element : 5
Completed

Kenapa Kita Harus Dispose dan Terminate Sebuah Observable?

Ketika kita melakukan subscribe kepada sebuah observable, observer akan selalu melisten atau ngeobserve semua event yang terjadi sampai obervable tersebut di terminate. Apabila sebuah observer melisten terus menerus ini akan meneyebabkan terjadinya memory leak. ada 2 cara untuk menghindari ini terjadi.

onDispose

Memanggil method onDispose(). Menthod ini akan menghetikan proses subcription secara manual dan membersihkan resource yang ada pada memory.

var observable = Observable.from([1,2,3,4,5])
var observer = observable.subscribe(onNext: { (element) in
print("Element : \(element)")
}, onError: { (err) in
print("Error \(err.localizedDescription)")
}, onCompleted: {
print("Completed")
}, onDisposed: {
print("Disposed")
})

observer.dispose()

Outputnya:

Element : 1
Element : 2
Element : 3
Element : 4
Element : 5
Completed
Disposed

DisposeBag

Menambahkan objek DisposeBag pada sebuah observer. Apabila ini dilakukan kita tidak perlu memanggil method onDispose() lagi secara manual, disposeBag akan secara otomatis menghentikan proses subscription dan membersihkan resource di memory apabila observer tersebut sudah tidak lagi digunakan.

let disposeBag = DisposeBag()

Observable<Int>.create { observer in
observer.onNext(1)
observer.onNext(2)
observer.onNext(3)
observer.onNext(4)
observer.onCompleted()
observer.onNext(5) // Tidak akan terpanggil
return Disposables.create()
}.subscribe(onNext: { (value) in
print("Element :\(value)")
}, onError: { (err) in
print("Error")
}, onCompleted: {
print("Completed")
}) {
print("Disposed")
}.disposed(by: disposeBag)

Outputnya:

Element : 1
Element : 2
Element : 3
Element : 4
Completed
Disposed

Akhirnya kita telah sampai di bagian akhir pada artikel kali. Jangan lupa clap apabila artikel kali ini bermanfaat dan follow saya untuk mejadi bagian dari 100 follower pertama saya :) Pada artikel berikutnya saya kan coba membahas tentang hal yang menarik di Rx Swift lainya bernama Subject. Jadi nantikan terus arikel saya selanjutnya yaa.

--

--

Galang Aji Susanto

iOS Developer | Apple Developer Academy Graduate | Mobile Tech Enthusiast | Full Time Learner & Part Time Coder