Я пытаюсь преобразовать проект в использование RxSwift и MVVM. У меня есть служба, которая синхронизирует список данных из Parse при каждом запуске приложения, и я в основном хочу убедиться, что я использую правильный подход.RxSwift с правильными переменными
То, что я сделал, является предметом переменной, а затем позволяет моим моделям слушать это. ParseService:
let rx_parseMushrooms = Variable<[ParseMushroom]>([])
MushroomLibraryModel:
_ = 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)
})
я сделать то же самое для выражения синхронизации состояния.
ParseService:
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
SyncViewModel:
_ = parseService.rx_syncState
.asObservable()
.subscribeNext { [weak self] (syncState:ParseService.SyncState) -> Void in
switch syncState.state {
//show stuff based on state struct
}
}
В любом случае я бы очень признателен, если кто-то может сказать мне, если это хороший способ обойти это или если я злоупотребляю RxSwift (и расскажу мне, как я должен делать это s ...)
Приветствия!
Удивительный и спасибо за ответ :) Как насчет части состояния синхронизации? В основном у меня есть класс обслуживания, который выполняет кучу материала до тех пор, пока библиотека не будет синхронизирована. Этот метод syncLibrary() вызывается при запуске приложения, но я хочу, чтобы несколько классов могли прослушивать состояние синхронизации в случае появления новых грибов. У меня также есть начальный экран, на котором я показываю ход синхронизации. Вы также сделали бы syncLibrary var? Это приложение btw на тот случай, если он объяснит, что я делаю goo.gl/xJaV0d, это уже я просто пытаюсь овладеть RxSwift, он продолжает дуть мне в голову. – Manny
Cool looking app.Как и в статье, на которую я ссылаюсь, вы редко нуждаетесь в предметах (включая переменную). Я думаю, что они в основном находятся в библиотеке в те времена, когда у вас есть что-то, например, вместо делегата, rx поток. –
В случае синхронизации ваш код DB уже должен быть завернут, чтобы он возвращал наблюдаемые. Мне нравится то, что я сделал выше для PFObject. Субъекты предназначены для создания горячих наблюдаемых из ничего. Ваша БД не должна генерировать горячие наблюдаемые. –