Представьте себе приложение, подобное Facebook, где вы создаете учетную запись и можете создавать посты. AuthviewModel (используется для обработки входа в систему и регистрации) /> ContentManager выглядит так: < /p>
class ContentManager: ObservableObject {
let contentService: ContentServiceProtocol
private var cancellables = Set()
var posts: [Post] = [] // holds all of the user’s posts
init(contentService: ContentServiceProtocol) {
self. contentService = contentService
}
func fetchAllPosts() {
contentService.getAllPosts()
.receive(on: RunLoop.main)
.sink(receiveCompletion: { data in
print("Received \(data)")
}, receiveValue: {[weak self] data in
// Get the posts and update the view model
self?.posts = data.data?. posts ?? []
}).store(in: &cancellables)
}
func createPost() {
// call endpoint to create a post
}
// dozens of other functions that call the api
}
< /code>
Теперь, в AuthviewModel, я обрабатываю логин, регистрацию, вход и т. Д. Посты пользователя: < /p>
class AuthViewModel: ObservableObject {
let authService: AuthServiceProtocol
private var cancellables = Set()
var posts: [Post] = [] // holds all posts returned on login
init(authService: AuthServiceProtocol) {
self.authService = authService
}
func login() {
// login logic here, left out for this question
authService.login()
.receive(on: RunLoop.main)
.sink(receiveCompletion: { data in
print("Received \(data)")
}, receiveValue: {[weak self] data in
// Get the posts and update the view model
self?.posts = data.data?. posts ?? []
}).store(in: &cancellables)
}
}
< /code>
Моя проблема в том, что я не хочу держать посты внутри AuthviewModel. Я хочу, чтобы ContentManager был единственным источником истины для всех сообщений пользователя.
Я не думаю, что называть ContentManager из AuthviewModel - это правильный способ, так как это сделало бы их слишком связанными. < /p>
Но я не знаю, как еще делать это.
Подробнее здесь: https://stackoverflow.com/questions/794 ... iew-models
Обмен данные между моделями просмотра? ⇐ IOS
Программируем под IOS
1740066266
Anonymous
Представьте себе приложение, подобное Facebook, где вы создаете учетную запись и можете создавать посты. AuthviewModel (используется для обработки входа в систему и регистрации) /> ContentManager выглядит так: < /p>
class ContentManager: ObservableObject {
let contentService: ContentServiceProtocol
private var cancellables = Set()
var posts: [Post] = [] // holds all of the user’s posts
init(contentService: ContentServiceProtocol) {
self. contentService = contentService
}
func fetchAllPosts() {
contentService.getAllPosts()
.receive(on: RunLoop.main)
.sink(receiveCompletion: { data in
print("Received \(data)")
}, receiveValue: {[weak self] data in
// Get the posts and update the view model
self?.posts = data.data?. posts ?? []
}).store(in: &cancellables)
}
func createPost() {
// call endpoint to create a post
}
// dozens of other functions that call the api
}
< /code>
Теперь, в AuthviewModel, я обрабатываю логин, регистрацию, вход и т. Д. Посты пользователя: < /p>
class AuthViewModel: ObservableObject {
let authService: AuthServiceProtocol
private var cancellables = Set()
var posts: [Post] = [] // holds all posts returned on login
init(authService: AuthServiceProtocol) {
self.authService = authService
}
func login() {
// login logic here, left out for this question
authService.login()
.receive(on: RunLoop.main)
.sink(receiveCompletion: { data in
print("Received \(data)")
}, receiveValue: {[weak self] data in
// Get the posts and update the view model
self?.posts = data.data?. posts ?? []
}).store(in: &cancellables)
}
}
< /code>
Моя проблема в том, что я не хочу держать посты внутри AuthviewModel. Я хочу, чтобы ContentManager был единственным источником истины для всех сообщений пользователя.
Я не думаю, что называть ContentManager из AuthviewModel - это правильный способ, так как это сделало бы их слишком связанными. < /p>
Но я не знаю, как еще делать это.
Подробнее здесь: [url]https://stackoverflow.com/questions/79455061/sharing-data-between-view-models[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия