0Pricing
Swift Academy · Pelajaran

Alternatif Pola Observer

Bandingkan dengan delegasi dan publisher Combine.

Alternatif Pola Observer adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Alternatif Pola Pengamat

NotificationCenter adalah salah satu cara untuk merespons peristiwa. Swift menyediakan cara lain: delegasi, Combine, dan aliran asinkron. Masing-masing cocok untuk bentuk komunikasi yang berbeda.

Pola Pengamat

Pola pengamat memungkinkan objek berlangganan peristiwa dari subjek. NotificationCenter adalah implementasi global dengan kopling longgar.

import Foundation

// Subject posts, observers react, neither holds the other.
NotificationCenter.default.post(name: Notification.Name("tick"), object: nil)
print("Broadcast an event")

Delegasi

delegate adalah hubungan satu-ke-satu: sebuah objek meneruskan peristiwa tertentu kepada satu delegate melalui protokol. Hubungan ini eksplisit dan aman terhadap tipe.

protocol DownloadDelegate: AnyObject {
    func didFinish(_ bytes: Int)
}
class Downloader {
    weak var delegate: DownloadDelegate?
    func finish() { delegate?.didFinish(1024) }
}
print("Delegate is one-to-one and typed")

Delegasi vs Notifikasi

Gunakan delegate ketika tepat satu objek yang berkepentingan dan hubungannya jelas. Gunakan NotificationCenter ketika banyak pengamat yang tidak diketahui sebelumnya mungkin merespons.

import Foundation

// One listener -> delegate. Many/unknown listeners -> NotificationCenter.
print("Cardinality guides the choice")

Penerbit Combine

Combine memodelkan peristiwa sebagai penerbit yang Anda langgani dengan sink, serta mendukung operator transformasi seperti map dan filter.

import Combine

let subject = PassthroughSubject<Int, Never>()
let c = subject.sink { print("Got \($0)") }
subject.send(5)
_ = c

Penerbit NotificationCenter

Combine menjembatani NotificationCenter: publisher(for:) mengubah notifikasi menjadi aliran yang dapat Anda transformasikan.

import Foundation
import Combine

let name = Notification.Name("ping")
let c = NotificationCenter.default.publisher(for: name)
    .sink { _ in print("Combine got notification") }
NotificationCenter.default.post(name: name, object: nil)
_ = c

Operator Combine

Kekuatan Combine terletak pada penyusunan alur peristiwa: penyaringan, penundaan, penggabungan, dan pemetaan nilai secara deklaratif.

import Combine

let subject = PassthroughSubject<Int, Never>()
let c = subject
    .filter { $0 > 0 }
    .map { $0 * 2 }
    .sink { print($0) }
subject.send(-1)
subject.send(3)
_ = c

Urutan Asinkron

Swift modern menyediakan AsyncStream dan urutan asinkron notifikasi, sehingga Anda dapat menggunakan peristiwa dengan for await dalam konkurensi terstruktur.

import Foundation

func listen() async {
    let name = Notification.Name("ping")
    for await _ in NotificationCenter.default.notifications(named: name) {
        print("Async observed")
        break
    }
}
print("Can await notifications")

Fungsi Penutupan dan Panggilan Balik

Untuk satu panggilan balik lokal, fungsi penutupan yang disimpan adalah pilihan paling sederhana, tanpa mekanisme pengamat sama sekali.

struct Button {
    var onTap: () -> Void
    func tap() { onTap() }
}
Button(onTap: { print("tapped") }).tap()

Memilih Pendekatan

Delegasi: satu-ke-satu, eksplisit. NotificationCenter: banyak-ke-banyak, tidak saling bergantung. Combine/asinkron: aliran yang memerlukan transformasi. Fungsi penutupan: panggilan balik lokal sederhana.

import Foundation

// Match the tool to the communication shape.
print("Delegate, Notification, Combine, async, closure")

Pertukaran

NotificationCenter fleksibel, tetapi tidak bertipe dan mudah menyebabkan kebocoran. Delegasi dan Combine aman terhadap tipe; Combine dan konkurensi asinkron memberikan lebih banyak kemampuan dengan konsekuensi bertambahnya konsep yang harus dipahami.

import Foundation

// Prefer typed approaches when the relationship is known.
print("Type safety vs flexibility tradeoff")

Pemeriksaan Singkat

Mekanisme mana yang paling tepat untuk hubungan satu-ke-satu yang jelas dan aman terhadap tipe?

Ringkasan

Pola pengamat memiliki beberapa bentuk dalam Swift: NotificationCenter untuk peristiwa banyak-ke-banyak yang tidak saling bergantung, delegasi untuk hubungan satu-ke-satu yang bertipe, Combine dan urutan asinkron untuk aliran yang dapat disusun, serta fungsi penutupan untuk panggilan balik sederhana. Pilih berdasarkan bentuk komunikasi dan kebutuhan keamanan tipe. Kursus ini selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Alternatif Pola Observer” gratis?

Ya — teks lengkap “Alternatif Pola Observer” 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 “Alternatif Pola Observer”?

Bandingkan dengan delegasi dan publisher Combine. 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 4 dari 4.

Berapa lama pelajaran “Alternatif Pola Observer” 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

  1. Mengirim dan Mengamati Notifikasi
  2. Payload Notifikasi userInfo
  3. Menghapus Pengamat dengan Aman
  4. Alternatif Pola Observer
← Kembali ke Swift Academy