RxSwift, wie zum Anhängen an BehaviorSubject<[]>

Da die Variable ist veraltet in RxSwift 4, was ist das äquivalent Weise für BehaviorSubject Folgendes zu tun?

let observable = Variable<[Int]>([])
observable.value.append(1)
InformationsquelleAutor JGuo | 2018-03-12



2 Replies
  1. 17

    BehaviorRelay ist ein Ersatz für Variable in neueren Versionen RxSwift, die offenbar ähnlich funktionieren. Variable hat eine Eigenschaft Wert strahlt das Ereignis aus, wenn sich geändert. Ähnlich wie mit BehaviorRelay, die Sie verwenden können, zugrunde liegenden akzeptieren(:), Methode, um den Wert zu ändern.

    let array = BehaviorRelay(value: [1, 2, 3])
    
    array.subscribe(onNext: { value in
        print(value)
    }).disposed(by: disposeBag)
    
    
    //for changing the value, simply get current value and append new value to it
    array.accept(array.value + [4])

    Dennoch, dies kann daran gearbeitet werden, mit BeviourSubject als gut, wenn Sie wollen,

    let subject = BehaviorSubject(value: [10, 20])
    subject.asObserver().subscribe(onNext: { value in
        print(value)
    }).disposed(by: disposeBag)

    Können Sie erhalten aktuelle Wert von BehaviorSubject mit einer werfenden Funktion Wert(), und so, indem der Wert so Aussehen,

    do {
        try subject.onNext(subject.value() + [40]) //concatenating older value with new 
    } catch {
        print(error)
    }

    Bemerken, dass Sie eine nennen müsste, onNext übergeben neuen Wert zu BehaviorSubject das ist nicht so einfach, wie es ist mit Variable oder BahaviorRelay

  2. 1

    Können wir auch BehaviorRelay Erweiterung Anhängen Objekte leicht:

    extension BehaviorRelay where Element: RangeReplaceableCollection {
    
        func add(element: Element.Element) {
            var array = self.value
            array.append(element)
            self.accept(array)
        }
    }

    Verwendung:

    self.wishList.add(element: item.element)

    Wunschliste ist Gegenstand der BehaviorRelay

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.