Gözlemci Desenine Alternatifler
Temsilciler ve Combine yayıncılarıyla karşılaştırın.
Gözlemci Desenine Alternatifler, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Gözlemci Deseni Alternatifleri
NotificationCenter, olaylara tepki vermenin bir yoludur. Swift başka seçenekler de sunar: temsilci kullanımı, Combine ve eşzamansız akışlar. Her biri farklı bir iletişim biçimine uygundur.
Gözlemci Deseni
Gözlemci deseni, nesnelerin bir konudan gelen olaylara abone olmasını sağlar. NotificationCenter, bunun genel ve gevşek bağlı bir uygulamasıdır.
import Foundation
// Subject posts, observers react, neither holds the other.
NotificationCenter.default.post(name: Notification.Name("tick"), object: nil)
print("Broadcast an event")Temsilci Kullanımı
Bir delegate, bire bir bağlantıdır: bir nesne, belirli olayları bir protokol aracılığıyla tek bir delegate öğesine iletir. Bu yaklaşım açık ve tür güvenlidir.
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")Delegate ve Bildirim Karşılaştırması
Tam olarak bir nesne ilgileniyor ve ilişki açıksa bir delegate kullanın. Birçok bilinmeyen gözlemci tepki verebilecekse NotificationCenter kullanın.
import Foundation
// One listener -> delegate. Many/unknown listeners -> NotificationCenter.
print("Cardinality guides the choice")Combine Yayıncıları
Combine, olayları sink ile abone olduğunuz yayıncılar olarak modeller ve map ile filter gibi dönüştürme işleçlerini destekler.
import Combine
let subject = PassthroughSubject<Int, Never>()
let c = subject.sink { print("Got \($0)") }
subject.send(5)
_ = cNotificationCenter Yayıncısı
Combine, NotificationCenter ile köprü kurar: publisher(for:), bildirimleri dönüştürebileceğiniz bir akışa çevirir.
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)
_ = cCombine İşleçleri
Combine'ın gücü, olay akışlarını birleştirmesidir: değerleri bildirimsel olarak filtreleyebilir, geciktirebilir, birleştirebilir ve eşleyebilirsiniz.
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)
_ = cEşzamansız Diziler
Modern Swift, AsyncStream ve eşzamansız bildirim dizileri sunar; böylece yapılandırılmış eşzamanlılık içinde for await ile olayları tüketebilirsiniz.
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")Kapanışlar ve Geri Çağrılar
Tek bir yerel geri çağırım için, hiçbir gözlemci mekanizmasına ihtiyaç duymayan saklanmış bir kapanış en basit seçenektir.
struct Button {
var onTap: () -> Void
func tap() { onTap() }
}
Button(onTap: { print("tapped") }).tap()Bir Yaklaşım Seçme
Delegate: bire bir, açık. NotificationCenter: çoktan çoğa, birbirinden bağımsız. Combine/eşzamansız yaklaşım: dönüştürme gerektiren akışlar. Kapanış: basit yerel geri çağrılar.
import Foundation
// Match the tool to the communication shape.
print("Delegate, Notification, Combine, async, closure")Ödünleşimler
NotificationCenter esnektir ancak tür bilgisi taşımaz ve bellek sızıntısına açıktır. Temsilci kullanımı ve Combine tür güvenlidir; Combine ve eşzamansız yaklaşım daha fazla kavram karşılığında daha fazla güç sunar.
import Foundation
// Prefer typed approaches when the relationship is known.
print("Type safety vs flexibility tradeoff")Kısa Kontrol
Açık, bire bir ve tür güvenli bir ilişki için hangi mekanizma en uygundur?
Özet
Gözlemci deseninin Swift'te çeşitli biçimleri vardır: birbirinden bağımsız çoktan çoğa olaylar için NotificationCenter, tür denetimli bire bir bağlantılar için temsilci kullanımı, birleştirilebilir akışlar için Combine ve eşzamansız diziler, basit geri çağrılar için kapanışlar. Seçiminizi iletişim biçimine ve tür güvenliği gereksinimlerine göre yapın. Böylece kurs tamamlanır.
Sıkça Sorulan Sorular
“Gözlemci Desenine Alternatifler” dersi ücretsiz mi?
Evet — “Gözlemci Desenine Alternatifler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Gözlemci Desenine Alternatifler” dersinde ne öğreneceğim?
Temsilciler ve Combine yayıncılarıyla karşılaştırın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Gözlemci Desenine Alternatifler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Bildirim Gönderme ve Gözlemleme
- Bildirim userInfo Yükleri
- Gözlemcileri Güvenle Kaldırma
- Gözlemci Desenine Alternatifler