Я создал действительно простые приложения перед использованием Model-View-ViewModel и шаблона Coordinator, и я полностью согласен с инверсией управления, которую они обеспечивают, так что это не должно быть вопросом о том, следует ли мне использовать их или что-то еще.
Мой вопрос; где разместить логику для вызова SKCloudServiceController.requestAuthorization((SKCloudServiceAuthorizationStatus) -> Void)
?
Когда я в первый раз вызываю код, всплывет контроллер представления предупреждений, запрашивающий у пользователя доступ к музыкальной библиотеке, и я чувствую, что он должен быть частью Координатора. В других случаях я чувствую, что он принадлежит ViewModel, потому что я хочу представить статус пользователю.
Ниже вы найдете мой код, поэтому у вас есть представление о моей структуре.
HomeViewModel.swift
class HomeViewModel {
init() {
//..
}
}
HomeViewController.swift
class HomeViewController: UIViewController {
private let viewModel: HomeViewModel
init(viewModel: HomeViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)
}
public func bindViewModel() {
//...
}
}
HomeCoordinator.swift
class HomeCoordinator {
private let presenter: UINavigationController
init(for presenter: UINavigationController) {
self.presenter = presenter
}
func start() {
let homeViewModel = HomeViewModel()
let homeViewController = HomeViewController(viewModel: viewModel)
homeViewController.bindViewModel()
self.presenter.pushViewController(homeViewController, animated: false)
}
}
Полный пример того, где и как вы видите, это реализовано, было бы здорово. Я также очень заинтересован в обсуждении этой темы, но я искал в Google и, похоже, ничего не нашел. В примерах всегда есть царапина на поверхности, которую я чувствую.
Пожалуйста, дайте мне знать, если есть что-нибудь еще, что я могу предоставить.