web-dev-qa-db-fra.com

Observer le tableau dans Swift 3 en utilisant RxSwift

Pour créer un tableau observable en utilisant RxSwift dans Swift 2, j'utilise pour cela:

[1, 2, 3].toObservable().subscribeNext { print($0) }

Mais dans Swift 3, cela ne fonctionne plus, j'ai eu cette erreur:

La valeur de type '[Int]' n'a pas de membre 'toObservable'

Comment puis-je créer un tableau observable RxSwift à partir d'un tableau Swift?

8
pableiros

Dans Swift 3 en utilisant RxSwift 3.0 Je vais faire ça comme ceci:

var array: Variable<[Int]> = Variable([1, 2, 3])
array.asObservable().subscribe(onNext: {
        updatedArray in
        print(updatedArray)
})
array.value.append(4) // it will trigger `onNext` event 

La principale différence est donc que vous devez créer un objet Variable au lieu d'utiliser un tableau explicite.

9
kamwysoc

Le constructeur toObservable array-to-Observable a été déconseillé.

Création d'un froid observable

Utilisez plutôt l'opérateur from pour créer un observable à froid:

let stream : Observable<Int> = Observable.from([1,2,3])

Ou si vous avez besoin de l'ensemble du tableau comme entrée, utilisez l'opérateur just pour créer un observable à froid.

let singleEmissionStream : Observable<[Int]> = Observable.just([1,2,3])

Les éléments du tableau au moment où l'opérateur from ou just est appelé seront le dernier ensemble d'émissions sur les événements onNext et se termineront par un onCompleted un événement. Les modifications apportées au tableau ne seront pas reconnues comme de nouveaux événements pour cette séquence observable.

Cela signifie que si vous n'avez pas besoin d'écouter les modifications sur ce tableau, vous pouvez utiliser les opérateurs just et from pour créer l'observable.

Mais que faire si j'ai besoin d'écouter les changements sur les éléments du tableau?

Pour observer les modifications sur un tableau [E], vous devez utiliser un observable à chaud comme l'unité Variable RxSwift, comme spécifié dans la réponse de k8mil. Vous aurez une instance de type Variable<[E]> où chaque émission onNext est l'état actuel du tableau.

Quelle est la différence entre un froid et un chaud observable?

Une distinction entre les observables froids et chauds est expliquée dans la documentation de RxSwift et dans reactivex.io . Voici une brève description des observables froids par rapport aux observables chauds.

Les observables à froid commencent à s'exécuter lors de la souscription, c'est-à-dire que la séquence observable ne commence à pousser les valeurs vers les observateurs que lorsque Subscribe est appelé. [...] Ceci est différent des observables à chaud tels que les événements de déplacement de souris ou les tickers boursiers qui produisent déjà des valeurs avant même qu'un abonnement soit actif.

Les opérateurs from et just prennent l'état actuel du tableau lorsque le code s'exécute, finalisant ainsi l'ensemble des émissions qu'il déclenchera pour sa séquence observable, quel que soit son abonnement. C'est pourquoi les modifications apportées ultérieurement à l'ensemble des éléments du tableau ne modifieront pas l'ensemble des éléments reconnus comme émissions lors de la création de l'observable à l'aide des opérateurs from ou just.

15
iwillnot