Как быстро переходить с одного экрана на другой. Работа в MVVM - PullRequest
0 голосов
/ 11 марта 2020

Я делаю это без работы в MVVM следующим образом, но что будет лучшим подходом для навигации в MVVM, если возможно, пожалуйста, рассмотрите оба случая - навигацию с данными или без данных, любая подсказка будет оценена: Спасибо

let st = UIStoryboard.init(name: "Register", bundle: nil)
    let register = st.instantiateViewController(withIdentifier: "RegisterVC" ) as! RegisterVC
register.data  =  self.data
self.navigationController?.pushViewController(register, animated: true)`

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вот как я уже некоторое время перемещался между контроллерами представления и нашел его весьма эффективным. Каждый из моих ViewControllers обычно имеет класс ViewModel, который отвечает за загрузку или сохранение логики c и / или данных. Я создаю такие свойства модели представления в каждом контроллере представления:

class ExampleViewController: UIViewController {
  lazy var viewModel = ExampleViewModel()

  override func viewDidLoad() {
    super.viewDidLoad()

    // Load data to the controller via the view model here
    viewModel.loadSomeData()
  }

  // This could be linked to a button from the UI builder
  @IBAction func nextPressed(_ sender: Any) {
    // Possibly use the view model to persist data here
    viewModel.saveSomeData()

    // Then navigate to the next controller
    self.navigationController?.pushViewController(NextViewController(), animated: true)
  }
}

В приведенном выше примере NextViewController будет иметь собственную модель представления, которая будет обрабатывать загрузку и сохранение данных. Как вы возвращаете данные из модели представления в контроллер, зависит от вас. Если это простые данные, вы можете просто вернуть их из функций, в противном случае для более сложных или асинхронных функций вы можете использовать делегат или замыкание. Хранение данных в контроллере может помешать классу стать слишком раздутым и уменьшить зависимость контроллеров друг от друга.

Таким образом, у вас обычно есть некоторый слой данных (возможно, несколько) под моделью представления. Это может быть API, который вызывает модель представления, или приложение может иметь локальную базу данных. И модель представления отделяет это от контроллера и представлений.

На немного не связанной стороне заметке я также предпочитаю, чтобы мои контроллеры были в виде файлов swift и .xib, вместо использования раскадровки, когда это возможно. Я нахожу, что доски с большими историями имеют тенденцию становиться очень медленными и в конечном итоге становятся утомительными для внесения изменений. Затем вы можете также инициализировать контроллеры, как я делал в примере, и вам не нужно сначала создавать объект раскадровки. Но это всего лишь личные предпочтения.

0 голосов
/ 12 марта 2020

расширение UIViewController {class fun c loadNib () -> Self {return loadNib (self)}} *

let travelV C = ItenararyConfirmationViewController.loadNib () navigationController? .PushViewController (travelV * 1006) *, анимация: правда)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...