Обмен данные между моделями просмотра?IOS

Программируем под IOS
Ответить
Anonymous
 Обмен данные между моделями просмотра?

Сообщение 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>
Но я не знаю, как еще делать это.

Подробнее здесь: https://stackoverflow.com/questions/794 ... iew-models
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»