私は最近のプロジェクトにVIPERアーキテクチャを使用しています。 しかし、私はUITableView DataSourceを実装する方法が不思議です。VIPMのUITableViewデータソース用のViewModel、
VIPERでは、Viewはパッシブです。イベントをPresenterに送信すると、Presenterは適切なViewData(ViewModel)をViewに送信します。
ViewでViewViewのViewModelsを保存しました。 (ビューはプレゼンターにデータを問わない。)
class View: UIViewController, UITableViewDataSource {
var viewModels: [CellViewModelType] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewModels.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let viewModel = viewModels[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIndetifier", for: indexPath)
cell.configure(with: viewModel)
return cell
}
}
ユーザーがのtableViewで項目を選択すると、ビューはプレゼンターにindexPathでdidSelectItemAt
イベントを送信します。プレゼンターは、イベントの適切なアクションを決定したり、VCを押したり、データをフェッチしたりします。
したがって、PresenterはViewData(またはReal Data)を知っている必要があります。 またはPresenterはInteractorにReal Dataを格納するため、イベントをInteractorに渡します。
ここに私のジレンマがあります。 データが広がっています。View、Presenter、Interactor。リアルデータはバックグラウンドで非同期に変更できるので(チャットアプリのように)
ご協力いただければ幸いです。 :D