Я думаю, вам нужно внедрить не модель в контроллеры, а службу для получения и сохранения этой модели, что-то вроде этого.
Протокол для службы:
protocol ModelServiceProtocol {
func obtainModel(completion: (Model) -> Void)
func save(model: Model, compleiton: ()->Void)
}
Пример ViewController с зависимостью:
class ViewController: UIViewController {
let modelService: ModelServiceProtocol
init(modelService: ModelServiceProtocol) {
self.modelService = modelService
}
func obtainModel() {
modelService.obtainModel { model in
// do something
}
}
func saveEditedModel() {
modelService.save(model: model) {
// model saved
}
}
}
Реализация ModelService, которая будет получать и сохранять вашу модель:
class ModelService: ModelServiceProtocol {
func obtainModel(completion: (Model) -> Void) {
// implementation of obtainig model from some storage
}
func save(model: Model, compleiton: ()->Void) {
// implementation of saving model in some storage
}
}
Внедрение зависимости:
func buildController() -> ViewController {
let modelService = ModelService()
let viewController = ViewController(modelService: modelService)
return viewController
}
При таком подходе вы получите актуальнуюМодель в ViewController, отредактируйте и сохраните в некотором хранилищеМодель будет актуальна на каждом шагу