見出し画像

【RxSwift】配列(Array)の値が変更した時に通知を受け取る

はじめに

RxSwift勉強中です。
誤りがあったり設計としてもっと優れたクラスがある場合などは
コメント欄でご教示いただきたいです。

実現したいこと

最終的にUITableViewを表示している箇所で、
TableViewで表示に使っている配列に変化があった場合、
そのTableViewを自動で更新されるようにしたいです。

配列の保持の方法

// 配列を監視対象とする。 イベントを受け取る
let relayβ = BehaviorRelay<[TweetModel]>(value: [TweetModel(user: "user0", tweet: "tweet0")])
let newValue = relayβ.value + [TweetModel(user: "user1", tweet: "tweet1")]
relayβ.accept(newValue)
print(relayβ)

let printValue = relayβ.value
print(printValue)


// 中身取り出して確認する
relayβ.subscribe(onNext: { _ in
   print("値が変わった")
   for item in relayβ.value {
       print(item)
   }
})
.disposed(by: disposeBag)

BehaviorRelayは最後の値を持っているので、
relay.accept(※value)を呼び出すと、relayの中身が上書きされます。

上記コードは作成したデータモデルTweetModel型を格納する配列と宣言し、初期値で1件のデータモデルを入れてます。

単純にarray.append(new Element)の感覚でrelay.accept()を呼び出すと、
上書きされて、以前の値は消えてしまいます。

なので、relay.value(getのみなので値をセット)から現在の値を取得し、
上書きする内容と結合したものをrelay.acceptで呼び出しています。

後半のコードでは、問題なく中身がtweetModel型が2件入っていることを
確認している処理になります。


私は読んでいませんが、RxSwiftの書籍などありますよ。



この記事が気に入ったらサポートをしてみませんか?