Как обрабатывать состояние приложения с помощью RxSwift

Я новичок в RxSwift и всей концепции RX, и я хотел бы знать, как обрабатывать глобальное состояние приложения, полученное с удаленного сервера с помощью RxSwift.

Давайте предположим, что мне нужно получить JSON и разобрать его в списке объектов, чтобы показать его в табличном представлении, но также мне нужно создать карту в формате [{id: object}, ...] использовать данные в других разделах приложения.

Например: приложение периодически извлекает список сотрудников с сервера и нуждается в данных для просмотра таблицы сотрудников, а также для сообщений сотрудников для отображения аватара и статуса с соответствующим сообщением. Таким образом, данные необходимы для просмотра моделей PersonViewModel а также MessageViewModel составлено по моделям Person и Message.

Был бы правильный способ иметь такую ​​структуру:

struct Person {
    let id: personId
    let fullName: String
    let status: personStatus
}

class PeopleStore {
    var order: [personId] = []
    var dataMap: [personId: Person] = [:]

    init(people: [Person]) {
        order = people.map { $0.id }
        for person in people {
            dataMap[person.id] = person
        }
    }
}

class AppState {
    let rx_peopleStore: Variable<PeopleStore>

    init(peopleStore: PeopleStore) {
        self.rx_peopleStore = Variable(peopleStore)
    }
}

И чтобы настроить состояние приложения путем выборки с сервера:

...
_ = PeopleApi
    .rx_peopleStore
    .asDriver(onErrorJustReturn: [])
    .driveNext { peopleStore in
        sharedAppState.rx_peopleStore.value = peopleStore
    }
...

И в viewModels:

...
_ = sharedAppState
    .rx_peopleStore
    .asDriver()
    .driveNext { store in
        // refreshUI by data from store
    }
    .addDisposableTo(bag)
...

Это правильный путь или существует какой-то другой и лучший подход? Я хотел бы также (в будущем) сохраненные данные сохраняются. Какова лучшая практика? Спасибо.

PS извините за опечатки в коде, если есть. Я просто написал это без компиляции.

1 ответ

У меня была похожая проблема с сохранением недавнего состояния различных вещей (например, ответов сервера, геолокации и т. Д.), И в конце концов я создал для этого облегченную инфраструктуру на основе Rx, которую я использую с тех пор, и посмотрю, подходит ли она и вашим потребностям. - https://github.com/maxvol/RaspSwift

Другие вопросы по тегам