Понимание по mvvm


#1

Добрый день. Подскажите как правильно для паттерна mvvm делать переход по нажатию на ячейку TableView.

Есть viewModel и TableViewController. TableViewController “общается” c viewModel через протокол.

Сейчас метод didSelectRowAt indexPath выглядит так

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let vc = NextViewController()
        self.navigationController?.pushViewController(vc, animated: true)
}

Правильно будет если я сам NextViewController буду отдавать через протокол?
Например:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        guard let viewModel = viewModel, let vc = viewModel.getNextVC(indexPath: indexPath) else { return }

        self.navigationController?.pushViewController(vc, animated: true)
}

Соответственно в протоколе будет так

protocol ViewModelProtocol {
func getNextVC(indexPath: IndexPath) -> UIViewController?

}

И во viewModel и протокол придётся добавить UIKit
?


#2

ViewModel ничего не должен знать о View, оставь свой переход во ViewController, или вынесите в отдельный Routing слой.