Я новичок в RxSwift. В моем коде происходит что-то странное. У меня есть представление коллекции иRxSwift: код работает только в первый раз
Driver [ "Строка"]
данных для связывания.
var items = fetchImages("flower")
items.asObservable().bindTo(self.collView.rx_itemsWithCellIdentifier("cell", cellType: ImageViewCell.self)) { (row, element, cell) in
cell.imageView.setURL(NSURL(string: element), placeholderImage: UIImage(named: ""))
}.addDisposableTo(self.disposeBag)
fetchImages
Функция возвращает данные
private func fetchImages(string:String) -> Driver<[String]> {
let searchData = Observable.just(string)
return searchData.observeOn(ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
.flatMap
{ text in // .Background thread, network request
return RxAlamofire
.requestJSON(.GET, "https://pixabay.com/api/?key=2557096-723b632d4f027a1a50018f846&q=\(text)&image_type=photo")
.debug()
.catchError { error in
print("aaaa")
return Observable.never()
}
}
.map { (response, json) -> [String] in // again back to .Background, map objects
var arr = [String]()
for i in 0 ..< json["hits"]!!.count {
arr.append(json["hits"]!![i]["previewURL"]!! as! String)
}
return arr
}
.observeOn(MainScheduler.instance) // switch to MainScheduler, UI updates
.doOnError({ (type) in
print(type)
})
.asDriver(onErrorJustReturn: []) // This also makes sure that we are on MainScheduler
}
Странно это. Первый раз, когда я принести с «цветком» он работает и возвращать данные, но когда я добавить этот код
self.searchBar.rx_text.subscribeNext { text in
items = self.fetchImages(text)
}.addDisposableTo(self.disposeBag)
Это не работает. Он не работает в обратном вызове flatmap, и из-за этого ничего не возвращает.
Да, я согласен с этим, но проблема в том, что во второй раз self.fetchImages (текст) ничего не возвращает, RxAlamofire .requestJSON не вызывает. Он швывает, что обратный вызов flatmap не работает, и из-за этого вызов не вызван –
Что вы подразумеваете под «вторым временем», ? Вы показали два разных использования ваших 'fetchImages'. Вы имеете в виду, что вы используете оба, и второй способ не работает, если он приходит позже? Или вы имеете в виду, что используете только последний вариант использования, и он работает, но только один раз? – solidcell
Я использую оба: сначала я вызываю функцию с цветами и возвращаемыми данными, второй раз я использую текст из строки поиска, и он ничего не возвращает. –