Я пытаюсь преобразовать проект для использования RxSwift и MVVM. У меня есть служба, которая синхронизирует список данных из Parse при каждом запуске приложения, и я в основном хочу убедиться, что использую правильный подход.
Что я сделал, так это сделал переменную тему, а затем позволил моим моделям слушать это. ПарсСервис:
let rx_parseMushrooms = Variable<[ParseMushroom]>([])
Грибная библиотекаМодель:
_ = parseService.rx_parseMushrooms
.asObservable()
.map { (parseMushrooms:[ParseMushroom]) -> [Mushroom] in
let mushrooms = parseMushrooms.map { (parseMushroom:ParseMushroom) -> Mushroom in
let mushroom = Mapper<Mushroom>().map(parseMushroom.dictionaryWithValuesForKeys(parseMushroom.allKeys()))
return mushroom!
}
return mushrooms
}
.subscribeNext({ (mushrooms:[Mushroom]) -> Void in
self.mushrooms = mushrooms
print(mushrooms)
})
Я делаю то же самое для выражения состояния синхронизации.
ПарсСервис:
struct SyncState {
enum State {
case Unsynced, ConnectingToServer, SyncingInfo, FetchingImageList, SyncingImages, SyncComplete, SyncCompleteWithError
}
var infoToSync = 0
var imagesToSync = 0
var imagesSynced = 0
var state = State.Unsynced
}
let rx_syncState = Variable(SyncState())
Затем я обновляю переменную а-ля
self.rx_syncState.value = self.syncState
Синквевемодел:
_ = parseService.rx_syncState
.asObservable()
.subscribeNext { [weak self] (syncState:ParseService.SyncState) -> Void in
switch syncState.state {
//show stuff based on state struct
}
}
В любом случае, я был бы очень признателен, если бы кто-нибудь сказал мне, хороший ли это способ сделать это или я неправильно использую RxSwift (и подскажет, как мне это делать).
Ваше здоровье!