RxSwift
in Swift 2)を使用して観測可能な配列を作成するには、次のようにします。
[1, 2, 3].toObservable().subscribeNext { print($0) }
しかし、Swift 3では、それはもう機能しません、私はこのエラーを受け取りました:
タイプ[[Int] 'の値にメンバー' toObservable 'がありません
Swift配列からRxSwift
監視可能配列を作成するにはどうすればよいですか?
Swift 3を使用してRxSwift 3.0
を使用して、これを次のように行います。
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
主な違いは、明示的な配列を使用する代わりにVariable
オブジェクトを作成する必要があることです。
toObservable
array-to-Observableコンストラクターは廃止されました。
代わりにfrom
演算子を使用して、コールドオブザーバブルを作成します。
let stream : Observable<Int> = Observable.from([1,2,3])
または、配列全体をエントリとして必要とする場合は、just
演算子を使用してコールドオブザーバブルを作成します。
let singleEmissionStream : Observable<[Int]> = Observable.just([1,2,3])
from
またはjust
演算子が呼び出された時点での配列の要素は、onNext
イベントでの最終的な排出のセットであり、onCompleted
イベントで終了します。配列への変更は、この監視可能なシーケンスの新しいイベントとして認識されません。
つまり、その配列の変更をリッスンする必要がない場合は、just
およびfrom
演算子を使用して、オブザーバブルを作成できます。
配列[E]
の変更を観察するには、k8milの回答で指定されているように、Variable
RxSwiftユニットのような hot observable を使用する必要があります。タイプVariable<[E]>
のインスタンスがあります。各onNext
の放出は配列の現在の状態です。
コールドとホットのオブザーバブルの区別は、 RxSwift のドキュメントと reactivex.io で説明されています。以下は、ホットオブザーバブルと比較したコールドオブザーバブルの簡単な説明です。
コールドオブザーバブルはサブスクリプションで実行を開始します。つまり、オブザーバブルシーケンスは、Subscribeが呼び出されたときにのみオブザーバーに値をプッシュし始めます。 [...]これは、サブスクリプションがアクティブになる前でも既に値を生成しているマウス移動イベントや株価表示などのホットなオブザーバブルとは異なります。
from
およびjust
演算子は、コードの実行時に配列の現在の状態を取得します。したがって、サブスクライブされている場合に関係なく、監視可能なシーケンスで発生するエミッションのセットを確定します。そのため、後で配列内の要素セットを変更しても、from
またはjust
演算子を使用してオブザーバブルの作成中に放出として認識される要素セットは変更されません。