Я пытаюсь создать searchBar, который ищет адреса через MKLocalSearch с запросом и с использованием RXSwift и привязкой к RXCocoa
Пока что я выполнил следующие 1. фильтры и устранение ошибок, чтобы избежать слишком большого количества запросов:
let searchRes = searchBar.rx.text
.orEmpty
.filter { query in
return query.characters.count > 4
}
.debounce(1, scheduler: MainScheduler.instance)
результирующий строковый запрос map: ed для создания MKLocationSearch, а затем flatMapp: ed для возврата массива MKMapItems, чтобы иметь возможность привязать массив к элементам tableView:
searchRes.map{query -> MKLocalSearch in let request = MKLocalSearchRequest() request.naturalLanguageQuery = query request.region = self.mapView.region return MKLocalSearch(request: request) }.flatMapLatest{search -> Observable<[MKMapItem]> in search.start(completionHandler:{(response, error) in let items: Variable<[MKMapItem]> = Variable([]) if let resp = response { //need to return the result form this // i.e. items.value = response.mapItems } //can not return from here since the request is async } }.bindTo //continue to bind to tableview
Как это можно сделать с помощью RXSwift, я не нашел подходящего примера