Ich versuche ein Projekt zu konvertieren, RxSwift und MVVM zu verwenden. Ich habe einen Dienst, der bei jedem App-Start eine Liste von Daten von Parse synchronisiert und ich möchte im Grunde sicherstellen, dass ich den richtigen Ansatz nehme.RxSwift Verwenden von Variablen korrekt
Was ich getan habe, ist ein variables Thema gemacht und dann erlauben meine Modelle, dies zu hören. 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)
})
mache ich das gleiche für den Sync-Zustand ausdrückt.
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())
ich die Variable dann aktualisieren a la
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
}
}
Sowieso würde ich mich sehr freuen, wenn mir jemand sagen kann, ob dies der ist ein guter Weg, um es zu tun, oder wenn ich RxSwift missbrauche (und mich führe, wie ich das machen soll s ...)
Prost! Hmm
Ehrfürchtig und danke für die Antwort :) Was ist mit dem Synchronisierungsstatus Teil? Im Grunde habe ich eine Service-Klasse, die eine Menge Sachen macht, bis die Bibliothek synchronisiert ist. Diese "syncLibrary()" -Methode wird beim App-Start aufgerufen, aber ich möchte, dass mehrere Klassen den Status der Synchronisierung abhören können, falls neue Pilze verfügbar werden. Ich habe auch den ersten Bildschirm, in dem ich den Fortschritt der Synchronisierung zeige. Würden Sie auch syncLibrary eine var machen? Dies ist die app btw für den Fall, dass es besser erklärt, was ich tun goo.gl/xJaV0d es ist schon raus Ich versuche nur RxSwift zu meistern es hält mir den Kopf .. – Manny
Cool aussehende App.Wie der Artikel, auf den ich referenziere, braucht man selten Subjekte (einschließlich Variable). Ich denke, sie sind hauptsächlich in der Bibliothek für jene Zeiten, wenn Sie etwas haben, das zum Beispiel einen Delegaten anstelle eines Callbacks nimmt und Sie in einen konvertieren möchten RX-Stream. –
Im Fall der Synchronisierung sollte Ihr DB-Code bereits umbrochen sein, damit Observables zurückgegeben werden. Ein bisschen wie das, was ich oben für PFObject getan habe. Die Themen dienen dazu, heiße Observable aus dem Nichts zu generieren. Ihre DB sollte keine heißen Observablen erzeugen. –