2017-10-03 2 views
3

Ich habe ein Problem versucht, diese Einführung in das MVVM Muster zu folgen und RxSwift: http://candycode.io/a-practical-mvvm-example-in-swift-part-2/RxSwift in schnellen 4-Bindungsdaten an einen Tableview

Etwa die Hälfte Weg nach unten, er bindet die Datenquelle (Autos) auf das Tableview . Dies ist der Teil ist, kann ich nicht in swift 4.

zu arbeiten scheinen, ich folgende Schoten bin mit:

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

Dies ist der Code, den ich mit der Fehler im bekommen (Gedanken versucht haben beschreibung war leichter auf einem Bild zu sehen): enter image description here

ich bei allen anderen Fragen ausgesehen haben ein Update für diese Erwähnung:
RxSwift, RxCocoa and UITableview
Cannot set bind(to: UITableView) with RxSwift Variable asObservable()

Aber kann nicht scheinen, es mit der schnellen 4 Version zu arbeiten. Hoffe ihr könnt mir helfen :)

Antwort

6

Die Fehlermeldung ist irreführend. Das Problem liegt in der Art, wie Sie Ihre cars-Eigenschaft initialisieren. Ihr carsVariable wraps ein Optionaler Typ. Sie können das nicht an eine Tabellenansicht binden.

Ändern der Initialisierung auf die folgende Zeile ein und alles ist in Ordnung:

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

By the way, Sie nicht die cars Array in einem Variable zu wickeln haben, können Sie es als Array verlassen können:

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

Und dann verwenden Observable.of(), um die Tabellenansicht zu binden:

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