2017-10-03 4 views
3

J'ai un problème en essayant de suivre cette introduction au modèle MVVM et RxSwift: http://candycode.io/a-practical-mvvm-example-in-swift-part-2/RxSwift à 4 rapide, liaison de données à un tableview

À mi-chemin vers le bas, il se lie à la source de données (voitures) au tableView . Ceci est la partie que je ne peux pas sembler se travailler dans rapide 4.

J'utilise les gousses suivantes:

pod 'RxSwift', '4.0.0-beta.0' 
pod 'RxCocoa', '4.0.0-beta.0' 

C'est le code que je l'ai essayé avec l'im erreur se (pensée est-était plus facile de voir sur une photo): enter image description here

J'ai regardé toutes les autres questions mentionnant une solution pour cela:
RxSwift, RxCocoa and UITableview
Cannot set bind(to: UITableView) with RxSwift Variable asObservable()

Mais ne peut pas sembler le faire fonctionner avec la version 4 rapide. J'espère que vous pouvez m'aider :)

Répondre

6

Le message d'erreur est trompeur. Le problème réside dans la façon dont vous initialisez votre propriété cars. Votre carsVariable enveloppe Type facultatif. Vous ne pouvez pas lier cela à une vue de table.

Modifier l'initialisation à la ligne suivante et tout va bien:

var cars = Variable((UIApplication.shared.delegate as! AppDelegate).cars) 

Par ailleurs, vous ne devez pas envelopper le tableau cars dans un Variable, vous pouvez le laisser comme un tableau:

let cars = (UIApplication.shared.delegate as! AppDelegate).cars 

Et puis utilisez Observable.of() pour le lier à la vue de la table:

Observable.of(cars).bind(to: tableView.rx.items(cellIdentifier: "CarCell", cellType: CarTableViewCell.self)) { (_, carViewModel: CarViewModel, cell) in 
    cell.carViewModel = carViewModel 
}.addDisposableTo(disposeBag)