MVVM stands for Model, View, ViewModel, a specific architecture pattern where the ViewModel stands between View and Model providing interfaces to imitate UI component. class CurrencyDataSource : GenericDataSource < CurrencyRate >, UITableViewDataSource { func numberOfSections ( in tableView : UITableView ) -> Int { return 1 } func tableView ( _ tableView : UITableView , numberOfRowsInSection section : Int ) -> Int { return data . let dataSource = CurrencyDataSource () lazy var viewModel : CurrencyViewModel = { let viewModel = CurrencyViewModel ( dataSource : dataSource ) return viewModel }() override func viewDidLoad () { super .