Penerbit dan Pelanggan Tersuai
Bina komponen Combine anda sendiri.
Penerbit dan Pelanggan Tersuai ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Melangkaui Penerbit Terbina Dalam
Combine disertakan dengan banyak penerbit, tetapi kadangkala anda perlu membungkus API bukan Combine sebagai penerbit, atau menggunakan nilai dengan kawalan tekanan balik yang tepat. Ini bermakna anda perlu melaksanakan sendiri protokol Penerbit dan Pelanggan.
Protokol Penerbit
Penerbit mengisytiharkan jenis Output dan Failurenya serta melaksanakan receive(subscriber:), yang menyerahkan subscription kepada pelanggan yang menyambung.
protocol Publisher {
associatedtype Output
associatedtype Failure: Error
func receive<S: Subscriber>(subscriber: S)
where S.Input == Output, S.Failure == Failure
}Peranan subscription
Apabila pelanggan menyambung, penerbit mencipta objek Subscription. Subscription ialah pautan yang mengurus permintaan dan menyampaikan nilai. Ia mematuhi Subscription, yang memanjangkan Cancellable.
Subscription Tersuai
Subscription menyimpan pelanggan dan bertindak balas terhadap permintaan dengan memancarkan nilai.
final class CountSubscription<S: Subscriber>: Subscription
where S.Input == Int {
private var subscriber: S?
private var current = 0
init(subscriber: S) {
self.subscriber = subscriber
}
func request(_ demand: Subscribers.Demand) {
var remaining = demand
while remaining > 0 {
remaining -= 1
remaining += subscriber?.receive(current) ?? .none
current += 1
}
}
func cancel() {
subscriber = nil
}
}Penerbit Tersuai
Penerbit hanya mencipta subscription dan menyerahkannya kepada pelanggan melalui receive(subscription:).
struct CountPublisher: Publisher {
typealias Output = Int
typealias Failure = Never
func receive<S: Subscriber>(subscriber: S)
where S.Input == Int, S.Failure == Never {
let subscription = CountSubscription(subscriber: subscriber)
subscriber.receive(subscription: subscription)
}
}Memahami Permintaan
Tekanan balik ialah kawalan aliran Combine. Pelanggan meminta jumlah Demand tertentu, dan penerbit tidak boleh menghantar lebih banyak nilai daripada yang diminta. Mengembalikan permintaan daripada receive(_:) meningkatkan kuota.
Protokol Pelanggan
Pelanggan tersuai melaksanakan tiga kaedah: menerima subscription, kemudian setiap nilai, dan akhirnya penamatan.
protocol Subscriber {
associatedtype Input
associatedtype Failure: Error
func receive(subscription: Subscription)
func receive(_ input: Input) -> Subscribers.Demand
func receive(completion: Subscribers.Completion<Failure>)
}Pelanggan Tersuai
Di sini, pelanggan meminta dua nilai terlebih dahulu, kemudian satu lagi untuk setiap nilai yang diterimanya, sambil mencetak nilai tersebut.
final class PrintSubscriber: Subscriber {
typealias Input = Int
typealias Failure = Never
func receive(subscription: Subscription) {
subscription.request(.max(2))
}
func receive(_ input: Int) -> Subscribers.Demand {
print("Value:", input)
return .max(1)
}
func receive(completion: Subscribers.Completion<Never>) {
print("Done")
}
}Membungkus Antara Muka Perwakilan
Salah satu kegunaan praktikal penerbit tersuai ialah menjambatani antara muka perwakilan atau panggilan balik ke dalam Combine, supaya kod lama boleh digubah. Anda menyimpan pelanggan dan meneruskan panggilan balik perwakilan sebagai panggilan receive(_:).
Utamakan subject Jika Boleh
Melaksanakan protokol secara manual jarang diperlukan. Untuk kebanyakan kerja penyambungan, PassthroughSubject atau CurrentValueSubject jauh lebih mudah — anda hanya perlu memanggil send(_:).
let subject = PassthroughSubject<Int, Never>()
subject
.sink { print($0) }
.store(in: &cancellables)
subject.send(1)
subject.send(2)Bila Perlu Menggunakan Pelaksanaan Tersuai
Gunakan pelaksanaan Penerbit/Pelanggan tersuai apabila anda memerlukan:
- Kawalan tekanan balik yang terperinci
- Pembungkusan sumber bukan Combine yang kompleks dengan cekap
- Operator yang boleh diguna semula dan selamat dari segi jenis
Jika tidak, subjek dan operator terbina dalam ialah alat yang sesuai.
Semak Pantas
Uji pengetahuan anda tentang penerbit tersuai.
Imbas Kembali
Anda telah mempelajari cara melaksanakan protokol teras Combine:
- Penerbit mencipta Subscription untuk setiap pelanggan
- Subscription menghormati Permintaan (tekanan balik)
- Pelanggan menerima subscription, nilai dan penamatan
- Utamakan subjek untuk kebanyakan keperluan penyambungan
Memahami bahagian dalaman ini menjelaskan cara semua Combine berfungsi.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “Penerbit dan Pelanggan Tersuai” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Penerbit dan Pelanggan Tersuai”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Penerbit dan Pelanggan Tersuai”?
Bina komponen Combine anda sendiri. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Penerbit dan Pelanggan Tersuai” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengubah dan Menggabungkan Strim
- Penjadual dan Pengurutan Benang
- Operator Pengendalian Ralat
- Penerbit dan Pelanggan Tersuai