İçeriğe geç

Combine ile Subject kullanımı

Merhabalar bu yazımda Combine ile Subject kullanımından bahsedeceğim.

Subject yapısı Publisherin özel türüdür diyebiliriz. Subject olarak oluşturulan değişkene data, Error ve .finished yollayabiliriz. Daha sonrasında abone olarak bunları okuyabiliriz.

Subject yapısını aşağıda görebilirsiniz.

public protocol Subject : AnyObject, Publisher {
    func send(_ value: Self.Output)
    func send(completion: Subscribers.Completion<Self.Failure>)
    func send(subscription: Subscription)
}

Subject yapısı 2 farklı sınıfdan oluşur.

PassthroughSubject:

Bu yapıda tüm standart .send işlemlerini yapabilirsiniz ve SwiftUI ilede çokça kullanacağımız bir yapı.

let subject = PassthroughSubject<String, Never>()
let publisher = subject.eraseToAnyPublisher()

let subscriberCompletion = publisher.sink(receiveCompletion: { (_) in
    print("FINISH!")
}) { (val) in
    print(val)
}

subject.send("@")
subject.send(completion: .finished)

CurrentValueSubject:

Bu yapıdada direkt olarak başlangıç değeri ile sınıfı yaratabiliyoruz. Ve anlık değeri .value değişkeni ile alabiliyoruz.

let subject = CurrentValueSubject<String, Never>("@")
let pub = subject.eraseToAnyPublisher()
pub.sink(receiveValue: { value in
    print(value)
})
subject.value // @
subject.send("+++")

 

 

Tarih:Combine

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2020 Kenan Atmaca