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?
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.
Le constructeur toObservable
array-to-Observable a été déconseillé.
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
oujust
est appelé seront le dernier ensemble d'émissions sur les événementsonNext
et se termineront par unonCompleted
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.
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.
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
.