Вызов API выполняется только один раз с использованием RxSwift

У меня этот код кажется правильным. Но это только реакция на первое изменение поиска. Таким образом, код выполняется только один раз. Я попытался добавить concat(Observable.never()) в свою функцию getAl, но она по-прежнему работает только один раз. Я что-то пропустил ?

exists = search.asObservable()
.throttle(0.3, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.flatMapLatest { searchString -> Observable<Bool> in
    guard !searchString.isEmpty else {
        return Observable.empty()
    }
    return ServiceProvider.food.getAll(whereFoodName: searchString)
        .flatMap({ (result) -> Observable<Bool> in
            return Observable.just(result.count > 0)
        })
}

person Ludovic    schedule 06.03.2017    source источник
comment
что такое search?   -  person ULazdins    schedule 06.03.2017
comment
@ULazdins Переменная‹String›   -  person Ludovic    schedule 07.03.2017


Ответы (1)


Ваш код просто возвращает Observable. Чтобы работать с ним, вы должны соблюдать его (или, скорее, subscribe к нему в терминологии Rx)

Вы, вероятно, захотите что-то вроде этого:

search.asObservable()
.throttle(0.3, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.subscribe(onNext: { searchString in 
  let exists = ServiceProvider.food.getAll(whereFoodName: searchString).count > 0
  print("Exists: \(exists)")
  // Or do whatever you want with `exists` constant
  // You could call a method to update UI
  if exists {
    self.button.enabled = true
  }
})
.disposed(by: disposeBag) //disposeBag should be your property which will be deallocated on deinit
person Palli    schedule 26.09.2017