Ich bin neu in RxSwift. In meinem Code passiert etwas seltsames. Ich habe eine Sammlung Ansicht undRxSwift: Code funktioniert nur beim ersten Mal
Driver [ "String"]
Daten für die Bindung.
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
Funktion gibt Daten
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
}
Merkwürdig ist dies. Zum ersten Mal, als ich mit „Blume“ hole es funktioniert und Daten zurück, aber wenn ich diesen Code hinzufügen
self.searchBar.rx_text.subscribeNext { text in
items = self.fetchImages(text)
}.addDisposableTo(self.disposeBag)
Es funktioniert nicht. Es führt keine Schritte im Flatmap-Callback durch und gibt daher nichts zurück.
Ja, ich mit ihm einverstanden ist, aber das Problem ist, zweites Mal self.fetchImages (Text) gibt nichts zurück, das RxAlamofire .requestJSON nicht aufrufen.Es scheint, dass Flatmap-Callback nicht Schritte und deshalb nennt der Anruf nicht –
Was meinst du mit "zweiten Mal" ? Sie haben zwei verschiedene Verwendungen Ihrer 'fetchImages' angezeigt. Meinst du, du verwendest beide, und der zweite Weg funktioniert nicht, wenn es später kommt? Oder meinst du, dass du nur den letzten Anwendungsfall verwendest und es funktioniert, aber nur einmal? – solidcell
Ich benutze beide, zuerst rufe ich Funktion mit "Blumen" und seine Rückgabedaten, zweites Mal benutze ich Text von Suchleiste und es gibt nichts zurück. –