J'utilise la dernière version de Moya avec RxSwift et j'ai rencontré un problème logique pour lequel je ne trouve pas de solution, pour le moment.Renouveler la demande dans RxMoya
Disons que j'ai un UITableViewController avec un ViewModel qui implémente l'interface suivante:
protocol ListViewModelType {
var items: Observable<[Item]> { get }
}
La propriété items
est mis en œuvre (en utilisant EVReflection):
var items: Observable<[Therapy]> {
get {
let provider = RxMoyaProvider<ItemService>()
return provider
.request(.all)
.map(toArray: Item.self)
}
}
Dans la méthode viewDidLoad de UITableViewController, j'ai mis en place une liaison entre la propriété items et la tableView via le code suivant:
self.viewModel.items
.bind(to: tableView.rx.items(cellIdentifier: cellIdentifier, cellType: cellType)) { row, element, cell in
// cell configuration code
}
.disposed(by: self.disposeBag)
Maintenant, je voudrais actualiser le contenu de UITableView pour refléter les changements que l'utilisateur a fait à travers d'autres parties de l'application. Considérant que RxMoyaProvider renvoie un Observable, cela devrait être facilement fait par une autre valeur émise par l'Observable, mais je ne sais pas comment communiquer au fournisseur qu'il devrait rafraîchir le contenu du serveur et le mettre dans le même Observable.
Ai-je oublié quelque chose ici? Existe-t-il une méthode plus recommandée pour lier un UITableView à une liste d'objets provenant d'un RxMoyaProvider?
Ok, je vois votre point sur le hors-premier principe, mais à l'heure actuelle est en dehors des exigences et je Je préfère rester en ligne seulement. La méthode que vous proposez ressemble beaucoup à un hack ... Etes-vous sûr qu'il n'y a aucun moyen de l'implémenter en utilisant quelque chose d'autre, comme un wrapper pour un MoyaProvider, peut-être? – MrAsterisco
Je ne vois vraiment pas l'intérêt de le faire. Sans le premier hors ligne –
Eh bien, le point serait de soutenir les situations où la réponse du serveur pourrait changer au fil du temps. Observables sont décrits comme des flux de données et, à mon humble avis, c'est exactement ce que j'ai ici: un flux de données qui émet une nouvelle valeur chaque fois que je lui demande de rafraîchir. – MrAsterisco