Mentransformasi dan Menggabungkan Aliran
Gunakan flatMap, merge, combineLatest, dan zip.
Mentransformasi dan Menggabungkan Aliran adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Bekerja dengan Aliran
Dalam Combine, publisher memancarkan aliran nilai seiring waktu. Kekuatan sebenarnya berasal dari operator yang mengubah dan menggabungkan aliran-aliran ini menjadi aliran baru.
Pelajaran ini membahas operator terpenting untuk mengubah dan menggabungkan aliran: flatMap, merge, combineLatest, dan zip.
map dibandingkan dengan flatMap
map mengubah setiap nilai menjadi nilai lain. flatMap melangkah lebih jauh—operator ini mengubah setiap nilai menjadi publisher baru dan meratakan hasilnya menjadi satu aliran.
Gunakan flatMap saat setiap masukan harus memicu operasi asinkron lain.
flatMap dalam Praktik
Di sini, aliran ID pengguna dipetakan menjadi aliran permintaan jaringan, lalu diratakan menjadi satu aliran pengguna.
userIdPublisher
.flatMap { id in
apiClient.fetchUser(id: id)
}
.sink { user in
print("Loaded", user.name)
}
.store(in: &cancellables)Mengendalikan Konkurensi flatMap
Secara bawaan, flatMap berlangganan ke semua publisher bagian dalam sekaligus. Anda dapat membatasi konkurensi dengan maxPublishers agar server tidak dibanjiri.
idsPublisher
.flatMap(maxPublishers: .max(2)) { id in
apiClient.fetchUser(id: id)
}
.sink { print($0) }
.store(in: &cancellables)merge
merge menyisipkan nilai dari beberapa publisher bertipe sama ke dalam satu aliran dan memancarkan setiap nilai segera setelah tiba.
let combined = buttonTapA
.merge(with: buttonTapB)
combined
.sink { print("A tap from either button") }
.store(in: &cancellables)combineLatest
combineLatest memancarkan nilai setiap kali input mana pun memancarkan nilai, dengan memasangkan nilai terbaru dari masing-masing input. Operator ini sangat cocok untuk validasi formulir ketika beberapa bidang harus dipertimbangkan sekaligus.
usernamePublisher
.combineLatest(passwordPublisher)
.map { name, pass in
!name.isEmpty && pass.count >= 8
}
.sink { isValid in
print("Form valid:", isValid)
}
.store(in: &cancellables)Perilaku combineLatest
Perhatikan: combineLatest tidak memancarkan apa pun sampai setiap input menghasilkan setidaknya satu nilai. Setelah itu, setiap pancaran baru dari input mana pun memicu keluaran gabungan yang berisi nilai terbaru dari input lainnya.
zip
zip memasangkan nilai berdasarkan indeks: nilai pertama dari A dengan nilai pertama dari B, nilai kedua dengan nilai kedua, dan seterusnya. Operator ini menunggu kedua sisi memiliki nilai pada setiap posisi.
let names = ["Ann", "Bob", "Cy"].publisher
let ages = [30, 25, 41].publisher
names
.zip(ages)
.sink { name, age in
print(name, "is", age)
}
.store(in: &cancellables)combineLatest dibandingkan dengan zip
Keduanya mudah tertukar:
- combineLatest—terpicu oleh pancaran apa pun dan menggunakan nilai terbaru dari masing-masing input
- zip—hanya terpicu oleh pasangan yang cocok berdasarkan indeks
Gunakan combineLatest untuk status langsung; gunakan zip untuk menyelaraskan hasil paralel satu per satu.
Menggabungkan Pekerjaan Paralel
zip sangat berguna saat menjalankan permintaan independen secara paralel dan menunggu semuanya selesai.
fetchProfile
.zip(fetchSettings)
.sink { profile, settings in
print("Both loaded")
}
.store(in: &cancellables)Merangkai Operator
Alur pemrosesan nyata merangkai beberapa operator untuk menyatakan alur asinkron yang kompleks secara deklaratif.
searchTextPublisher
.removeDuplicates()
.flatMap { query in
apiClient.search(query)
}
.map { results in
results.prefix(10)
}
.sink { print($0) }
.store(in: &cancellables)Uji Singkat
Ujilah pengetahuan Anda tentang operator.
Ringkasan
Anda telah mempelajari cara mengubah dan menggabungkan aliran:
- flatMap—nilai menjadi publisher, lalu diratakan
- merge—menyisipkan aliran bertipe sama
- combineLatest—nilai terbaru dari masing-masing input dan terpicu oleh input mana pun
- zip—pasangan yang dicocokkan berdasarkan indeks
Operator-operator ini memungkinkan Anda menyusun logika asinkron yang kompleks secara deklaratif.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mentransformasi dan Menggabungkan Aliran” gratis?
Ya — teks lengkap “Mentransformasi dan Menggabungkan Aliran” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mentransformasi dan Menggabungkan Aliran”?
Gunakan flatMap, merge, combineLatest, dan zip. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mentransformasi dan Menggabungkan Aliran” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mentransformasi dan Menggabungkan Aliran
- Penjadwal dan Threading
- Operator Penanganan Kesalahan
- Publisher dan Subscriber Kustom