@Tkas

Использование статических свойств во viewModel в паттерне MVVM в случае «одна вью модель — несколько вью». Корректен ли данный подход?

Есть одна вью модель с некоторым количеством свойств (имя и возраст). В первом вью контроллере отображаются значения этих свойств (например Joe 30). При нажатии на кнопку происходит переход на второй вью контроллер, в котором можно отредактировать эти два значения (на, допустим, Misha 40). Соответственно, при возвращении на первый вью контроллер, в лейблах должны отобразиться эти новые значения. Данную задачу можно решить двумя способами: это использовать статические свойства:
class ViewModel {
    static var name = BehaviorRelay<String>(value: "Joe")
    static var age = BehaviorRelay<String>(value: "30")
}

Либо передавать self
class ViewModel {
    var name = BehaviorRelay<String>(value: "Joe")
    var age = BehaviorRelay<String>(value: "30")
    
    func foo() -> ViewModel {
        return self
    }
}

Вопрос: какой из этих подходов правильный? Или можно сделать как-то иначе, сделав ещё одну вью модель (EditViewModel, например (но в таком случае я не знаю как обновить данные в первом вью))?
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
briahas
@briahas
ObjC, Swift, Python
По моему вы не правильно понимаете смысл вьюмодели:
- по ней только лишь отрисовывают.
- вьюмодель ни кто не изменяет
- вьюмодель создается лишь из модели

Т.е., получается, что у вас есть модель в которой есть данные в некоем виде.
Эта модель то и передается везде между контролеррами.
И вот, когда надо отобразить данные - из модели генерируется необходимая вьюмодель

Т.е., ответом на ваш вопрос будет следующее - передавайте модель (которая лучше чтоб была структурой) между контролерами, а они из нее будут брать нужную их вью модель и показывать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
14 апр. 2021, в 20:27
20000 руб./за проект
14 апр. 2021, в 20:08
500 руб./за проект
14 апр. 2021, в 19:41
10000 руб./за проект