質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

4066閲覧

MVVM + RxSwiftを使用した時の異なる画面間でのデータの受け渡し方法について

tarotarosu

総合スコア114

RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/03/07 07:42

前提・実現したいこと

MVVM + RxSwiftを用いた時に生じる異なる画面間でのデータの受け渡し方法のベストな方法を教えていただきたいです。

例えば、画面1ではTableViewがあり、TableViewCellをタップすると、画面2に遷移します。
この遷移時に、画面1でタップしたTableViewCellの情報を画面2に渡したいと考えています。

画面1で以下のようなコードを書けばタップしたCellの情報を取得できると思います。

swift

1func selectCell() { 2 tableView.rx.modelSelected(Model.self) 3 .subscribe(onNext: { [weak self] model in 4 // タップしたCellの情報は取得できる 5 print(model) 6 7 // 画面2に遷移 8 self?.performSegue(withIdentifier: "segue", sender: nil) 9 }) 10 .disposed(by: disposeBag) 11 }

この中で、以下のようなコードを書けばタップしたCellの情報を渡せることは渡せますが、MVVM + RxSwiftを使っている場合、ベストな方法とはあまり思えません。

swift

1let vc = segue.destination as! NextViewController 2vc.model = model

こういった方法ではなく、MVVM + RxSwiftを用いた時に生じる異なる画面間でのデータの受け渡し方法のベストプラクティス的なものがあれば教えていただきたいですm(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/07 09:21

Storyboard というか segue を使う限り、performSegue と prepareForSegue が分かれちゃうので、sender に model を指定する方法もありますが、型が Any? なのが嫌だったりして、結局 segue を諦めるという方向になったりするようです。 https://ca.wantedly.com/companies/wantedly/post_articles/49881
guest

回答1

0

ベストアンサー

個人的な意見なので、ベストプラクティスかは自信がありませんが...

Storyboardを使用した場合、
Segueで遷移するのではなくUIStoryboard().instantiateInitialViewController()からViewControllerを生成して、
UINavigationControllerpushUIViewControllerpresentを使用して遷移するともう少しスマートになると思います。

有名なkickstarterのOSSを見ると、似たような感じで他の画面へのデータ受け渡しをしています。

ざっくり見てみると、
各ViewControllerにconfigureWith()と言うstaticなメソッドを定義して、
引数に渡したいデータを指定します。(参考)

そして、画面遷移時にconfigureWith()を使用してViewControllerを生成し、
NavigationControllerのpushで遷移します。(参考)

kickstarterのOSSはStoryboardの生成の部分など参考にできそうなところが多いので、
一度読んでみることをお勧めします。

投稿2020/03/09 01:47

hayabusabusash

総合スコア767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問