0Pricing
Swift Academy · Ders

Özel Yayıncılar ve Aboneler

Kendi Combine bileşenlerinizi oluşturun.

Özel Yayıncılar ve Aboneler, 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.

Yerleşik yayıncıların ötesinde

Birleştirme birçok yayıncıyla birlikte gelir, ancak bazen Birleştirme dışı bir arayüzü yayıncı olarak sarmanız veya değerleri hassas geri basınç denetimiyle tüketmeniz gerekir. Bu da Yayıncı ve Abone protokollerini kendiniz uygulamanız anlamına gelir.

Yayıncı protokolü

Bir Yayıncı, Output ve Failure türlerini bildirir ve gelen aboneye bir abonelik verdiği receive(subscriber:) işlevini uygular.

protocol Publisher {
    associatedtype Output
    associatedtype Failure: Error
    func receive<S: Subscriber>(subscriber: S)
        where S.Input == Output, S.Failure == Failure
}

Aboneliğin rolü

Bir abone bağlandığında yayıncı bir Abonelik nesnesi oluşturur. Abonelik, talebi yöneten ve değerleri ileten bağlantıdır. Subscription ile uyumludur; bu protokol de Cancellable protokolünü genişletir.

Özel abonelik

Abonelik, aboneyi saklar ve değerler yayarak talep isteklerine yanıt verir.

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
    }
}

Özel yayıncı

Yayıncı yalnızca aboneliği oluşturur ve receive(subscription:) aracılığıyla aboneye iletir.

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)
    }
}

Talebi anlama

Geri basınç, Birleştirme'nin akış denetimidir. Bir abone belirli bir Demand ister ve yayıncı istenenden daha fazla değer göndermemelidir. receive(_:) işlevinden talep döndürmek, izin verilen miktarı artırır.

Abone protokolü

Özel bir Abone üç yöntem uygular: önce aboneliği, ardından her değeri ve son olarak tamamlanmayı alır.

protocol Subscriber {
    associatedtype Input
    associatedtype Failure: Error
    func receive(subscription: Subscription)
    func receive(_ input: Input) -> Subscribers.Demand
    func receive(completion: Subscribers.Completion<Failure>)
}

Özel abone

Burada bir abone başlangıçta iki değer ister, ardından aldığı her değer için bir tane daha ister ve bu sırada yazdırır.

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")
    }
}

Temsilci arayüzünü sarmalama

Özel yayıncıların pratik bir kullanım alanı, bir temsilciyi veya geri çağırma arayüzünü Birleştirme'ye bağlamaktır; böylece eski kod birleştirilebilir hâle gelir. Aboneyi saklar ve temsilci geri çağrılarını receive(_:) çağrıları olarak iletirsiniz.

Mümkün olduğunda özneleri tercih edin

Protokolleri elle uygulamak nadiren gerekir. Çoğu köprüleme işlemi için bir PassthroughSubject veya CurrentValueSubject çok daha basittir — yalnızca send(_:) çağırırsınız.

let subject = PassthroughSubject<Int, Never>()

subject
    .sink { print($0) }
    .store(in: &cancellables)

subject.send(1)
subject.send(2)

Ne zaman özel uygulamaya geçmeli

Özel Yayıncı/Abone uygulamalarına şu durumlarda başvurun:

  • Ayrıntılı geri basınç denetimi gerektiğinde
  • Karmaşık bir Birleştirme dışı kaynağı verimli biçimde sarmalamanız gerektiğinde
  • Yeniden kullanılabilir, tür güvenli işleçlere ihtiyaç duyduğunuzda

Aksi durumda özneler ve yerleşik işleçler doğru araçlardır.

Hızlı kontrol

Özel yayıncı bilginizi sınayın.

Özet

Birleştirme'nin temel protokollerini uygulamayı öğrendiniz:

  • Yayıncı her abone için bir Abonelik oluşturur
  • Abonelik, Talep değerine (geri basınca) uyar
  • Abone aboneliği, değerleri ve tamamlanmayı alır
  • Çoğu köprüleme ihtiyacı için özneleri tercih edin

Bu iç işleyişi anlamak, Birleştirme'nin nasıl çalıştığını daha anlaşılır hâle getirir.

Sıkça Sorulan Sorular

“Özel Yayıncılar ve Aboneler” dersi ücretsiz mi?

Evet — “Özel Yayıncılar ve Aboneler” 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.

“Özel Yayıncılar ve Aboneler” dersinde ne öğreneceğim?

Kendi Combine bileşenlerinizi oluşturun. 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.

“Özel Yayıncılar ve Aboneler” 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

  1. Akışları Dönüştürme ve Birleştirme
  2. Zamanlayıcılar ve İş Parçacıkları
  3. Hata İşleme Operatörleri
  4. Özel Yayıncılar ve Aboneler
← Swift Academy Sayfasına Dön