I am currently developing an iOS application using the MVVMC architecture. I got some idea about MVVMC by reading this article. As a typical MVVM model, we know that all major application controllers, such as web service calls, must call the ViewModel class. But in the MVVMC architecture, we can use either the coordinator or the ViewModel to invoke web services. I could not figure out what is the best place for this.
I am currently trying to implement an application user list page using a UITableViewController. Below are some parts of my UserCoordinator and UserViewModel classes.
UserCoordinator
class UsersCoordinator: Coordinator {
var window: UIWindow
weak var delegate: UsersCoordinatorDelegate?
var selectedCity: City?
init(window: UIWindow) {
self.window = window
}
func start() {
let storyboard = UIStoryboard(name: "Users", bundle: nil)
if let vc = storyboard.instantiateViewController(withIdentifier: "list") as? UsersListController {
var viewModel = UsersListViewModel()
viewModel.delegate = self as UsersListViewModelDelegate
viewModel.veiwController = vc
vc.viewModel = viewModel
vc.coordinationDelegate = self as CoordinationDelegate
let nav = UINavigationController.init(rootViewController: vc)
window.rootViewController = nav
}
}
UserViewModel
protocol UsersListViewModelDelegate: class {
func selectUser(viewController: UIViewController, city: City)
}
struct UsersListViewModel {
var delegate: UsersListViewModelDelegate?
weak var veiwController: UsersListController!
var source = [String]()
init() {
for user in users {
source.append(user.name)
}
}
func selectRow(row: NSInteger) {
delegate?.selectUser(viewController: veiwController, user: users[row])
}
fileprivate var users: [User] {
get {
}
- ? , - . - ViewModel. - , viewModel. ?