Я новичок как в RxSwift, так и в RxCocoa.
У меня есть работающий REST-сервис на локальном компьютере, который возвращает объект Movie для заданного "id".
На моей раскадровке есть tableView(UITableView), который имеет пользовательские ячейки (MovieCell).Каждая ячейка фильма имеет UILabel с именем «nameTextLabel».У меня также есть textField для получения запрошенного movie.id от пользователя.
Я пытаюсь показать movie.title в каждой строке моего tableView.
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
@IBOutlet var textField: UITextField!
@IBOutlet var tableView: UITableView!
let bag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
configureReactiveBinding()
}
private func configureReactiveBinding() {
textField.rx.text.asObservable()
.map { ($0 == "" ? "15" : $0!).lowercased() }
.map { GetMovieByIdRequest(id: $0) }
.flatMap { request -> Observable<Movie> in
return ServiceManager.instance.send(apiRequest: request)
}
.debug("movie")
// output:
//2018-10-17 16:13:49.320: movie -> subscribed
//2018-10-17 16:13:49.401: movie -> Event next(MovieAdvisor.Movie)
//2018-10-17 16:13:52.021: movie -> Event next(MovieAdvisor.Movie)
.toArray()
.debug("tableView")
// output:
//2018-10-17 16:13:49.318: tableView -> subscribed
.bind(to: tableView.rx.items(cellIdentifier: "movie_cell", cellType:MovieCell.self)) { index, model, cell in
cell.nameTextLabel.text = model.title
}
.disposed(by: bag)
}
}
Каждый раз, когда textLabel изменяетсяпечатается новый movie.id, но tableView не показывает никаких данных - даже с начальным значением (когда textField равно "").
Есть идеи, как это исправить?
Последобавив строки debug (), я понял, что tableView подписывается только один раз, и никакие последующие события не вызывают tableView.Что я должен делать?Код загружен на GitHub github