What is the best place to call web services in an iOS app with MVVMC architecture?

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 {
            //web service call??
        }

- ? , - . - ViewModel. - , viewModel. ?

+6
2

, . , MVVM-C - , , , .

. , , , Service, WebService. .

  • Init WebService
  • ViewModel ( ViewModel )
+1

, , -. . Coordinator ViewModel.

  • ViewController
  • ViewModel

, . start(), - .

func start() {
    let storyboard = UIStoryboard(name: "Users", bundle: nil)
    if let vc = storyboard.instantiateViewController(withIdentifier: "list") as? UsersListController {
        let uDs = UserDataService(pClient:APIClient())
        uDs.getUserDetails { (response, status) in
            if (status == APIClient.APIResponseStatus.Success) {
                if let resArrray = response as? [User] {
                    var viewModel = UsersListViewModel.init(userList: resArrray)
                    viewModel.delegate = self as UsersListViewModelDelegate
                    viewModel.veiwController = vc
                    vc.viewModel = viewModel
                    vc.coordinationDelegate = self as CoordinationDelegate
                    let nav = UINavigationController.init(rootViewController: vc)
                    self.window.rootViewController = nav
                }
            } else {
                //error alert
            }
        }
    }
}

- Coordinator. - . , , ViewController . . - viewModel.

, , MVVM-C. GitHub. .

, , MVVM-C, -, viewModels ..

+1

All Articles