RxSwift Bağımlılığı

RxSwift Bağımlılığı

RxSwift'i kullandıysanız, bu kod parçasını biliyorsunuzdur:

var taskChangeEvent = BehaviorSubject<Bool>()
...

if newValue != oldValue {
  subject.onNext(newValue)
}

...

taskChangeEvent.subscribe(onNext: { [weak self] done in
    ....
}).dispose(by: disposeBag)

Bu işlemi biraz daha basit hale getirmek ve RxSwift bağımlılığını tek bir yere indirgemek için, sadece bu adımları uygulayarak basit bir sınıf oluşturuyorum.

import RxSwift

class EventSerializer<T: Equatable> {
    private var disposeBag = DisposeBag()
    fileprivate let contactPoint: BehaviorSubject<T>
    var value: T

    func send(_ newValue: T) {
        contactPoint.onNext(newValue)
        self.value = newValue
    }
    func sendValueIf(_ newValue: T, compareWith: (_ oldValue: T, _ newValue: T) -> Bool) {
        if compareWith(self.value, newValue) {
            contactPoint.onNext(newValue)
            self.value = newValue
        }
    }
    func listen(onChange: @escaping ((T) -> Void)) {
        contactPoint.subscribe( onNext: { value in
            onChange(value)
        }).disposed(by: disposeBag)
    }
    init(defaultValue: T, contactPoint: BehaviorSubject<T>? = nil) {
        self.contactPoint = contactPoint ?? BehaviorSubject<T>(value: defaultValue)
        self.value = defaultValue
    }
}

Ateşleme mantığı sınıfın içindedir ve mantığı ayrı bir fonksiyona bölebilirsiniz.

Akışı dinlemek çok daha temiz ve kodun her yerinde bir disposeBag yok.

var task = EventSerilizer<Bool>(defaultValue: false)

...

func shouldInformTaskChange(_ oldValue: Bool, _ newValue: Bool) {
    oldValue != newValue
}
task.sendValueIf(true, compareWith: shouldInforTaskChange)

...

task.listen { [weak self] value in 
    ....
}

func listenToCombineLatest<E: Equatable>(with otherSerializer: EventSerializer<E>, onChange: @escaping ((T, E) -> Void)) {
    Observable.combineLatest(self.contactPoint, otherSerializer.contactPoint).subscribe(onNext: { tValue, eValue in
        onChange(tValue, eValue)
    }).disposed(by: disposeBag)
}

BehaviorSubject kullanımına ilişkin bir yan not

Bildiğiniz gibi BehaviorSubject, dinlemeye başlayan son olayı yayınlar. Bu kurulum aşamasında sorun olabilir çünkü borularda su varken tesisat gibi olur. Henüz hazır değilken ziyaret ediliyorsunuz. Öte yandan, PublishSubject boruları birbirine bağlamanıza izin verir ve ardından olayları gönderir.

Bu nedenle, etkinlikleri almadan önce biraz hazırlık süresine ihtiyacınız varsa PublishSubject'i kullanmayı düşünün.

Suggested posts

Uygulama Yaşam Döngüsü

Uygulama Yaşam Döngüsü

: Uygulama başlatmadan kapatmaya döngü: Bellek veya verileri yöneterek kullanılabilirlik ⬆️ Güvenlik işlenebilir UIApplication, AppDelegate durumu: AppDelegate nesnesinin UIApplication nesnesinden gönderilen mesajı aldığı ve her birini yürüttüğü işlevleri tanımlar Çalışmıyor: Uygulamanın çalışmadığı durum Etkin değil: Uygulamanın çalıştığı ancak hiçbir etkinliğin alınmadığı durum Etkin: Uygulamanın çalıştığı ve bir olayın meydana geldiği durum Arka Plan: Uygulamanın arka planda olduğu ancak yürütülmekte olan kodun bulunduğu durum Askıya Alındı: Uygulamanın bulunduğu durum arka plan ve kod çalıştırma, AppDelegate.swift dosyasında delege işlevleri olacak SceneDelegate iOS 13'ten itibaren desteklenen çoklu sahne işlevine iyi yanıt vermek için AppDelegate / SceneDelegate AppDelegate 1.

iOS Uygulama Yaşam Döngüsü

iOS Uygulama Yaşam Döngüsü

⭐ uygulama başladığında AppDelegate'in uygulamaya ilk dokunulduğunda ve başlatıldığında çağrıldığı sıra. func application(_:willFinishLaunchingWithOptions) func application(_:didFinishLaunchingWithOptions:) func applicationDidBecomeActive(UIApplication) ⭐ arka plan uygulaması Bu, uygulama arka plana taşındığında AppDelegate'in çağrıldığı sıradır.

Related posts

Hristiyanlara Yönelik Zulüm: Bahsetmediğimiz Nefret Suçu

İslamofobiyi unutun: Hristiyanlar (ve Yahudiler) dini nefret suçlarının başlıca kurbanlarıdır.

Hristiyanlara Yönelik Zulüm: Bahsetmediğimiz Nefret Suçu

Her rasyonel akıl, siyaset ve medya çevrelerinde solun, hatta aşırı solun hakim olduğunu bilir, bu durum siyasi söylemde bir dengesizlik yaratır. Din alanında, bu dengesizlik açıkça görülüyor: solcu gazeteler ve ağlar, Hıristiyan inancını savunmak için acele etmiyorlar.

Bir Çocuğun İlk Kafasını Yükseltme Kitabı

Bir Çocuğun İlk Kafasını Yükseltme Kitabı

(Uyarı- Bu Hiciv, Neşeyle Yıkıcı Olma Amaçlıdır- Kesinlikle çocuklar için değildir) Annenizi ve babanızı mutfakta saklanıp o kokulu sigaraları içerken gördünüz. Sana söylerler.

Tehlikeli Konuşmalar

Tehlikeli Konuşmalar

Bu gezegende gelişmeye devam etmek istiyorsak, tehlikeli konuşmalar yapmak zorunda kalacağız. Yaptıklarımıza, yaptıklarımıza ve şu anda yapmaya devam etmeye hazır olduğumuz (veya yapmayı planladığımız) şeylere meydan okuyanlar.

Goodreads Okuma Yarışması Zehirlidir

Goodreads Okuma Yarışması Zehirlidir

Elimdeki kaşıntı, yerel kitapçıyla başka bir kitap için pazarlık yaparken yayıldı. Son zamanlarda satın aldığım diğerleri gibi bu kitap da tahtını 'Okunacak' (TBR) yığınımda bulacaktı; ve yine de satın aldım.