состояние фильтра с помощью rx Swift - PullRequest
0 голосов
/ 17 мая 2018

Я хочу нанести на карту диктовку и flatMap для возврата нового Observable. Я пытаюсь Observable, поскольку я мог бы или 1 единственный объект или массив объекта.

func fetchRibsList() -> Observable<[LCLRibAccount]>  {
        return provider.rxDict(service: .fetchRibsList)
            .map({ (dict, _) -> [String: Any] in
                return dict
            })
            .filter({ dict -> Bool in
                dict["ribs"] != nil
            })
            .filter({ dict -> Bool in
                dict["rib"] != nil
            })
            .flatMap({ dict -> Observable<Any> in

                //return either list of ribs or 1 single rib
                if let ribs = dict["ribs"] as? [String: Any] {
                    return Observable.just(LCLRib.parseAccountList(with: ribs))
                }

                if let rib = dict["rib"] as? [String: Any] {
                    return Observable.just(LCLRib.parseRib(with: rib))
                }

                return Observable.empty()
            })
    }

возможно ли включить условие с 2 flatMap и вернуть массив или 1 отдельный объект проблема в том, что мне нужно быть конкретным с типом Observable:

это ошибка, которую я получаю: Невозможно преобразовать возвращаемое выражение типа 'Observable' в тип возвращаемого значения 'Observable <[LCLRibAccount]>'

enter image description here

1 Ответ

0 голосов
/ 17 мая 2018

Проблема в типе возврата вашей функции func fetchRibsList() -> Observable<[LCLRibAccount]>. Ожидается наблюдаемый из массива. Возможно, вы можете обернуть один объект в массив. Как это:

func fetchRibsList() -> Observable<[LCLRibAccount]>  {
    return provider.rxDict(service: .fetchRibsList)
        .map({ (dict, _) -> [String: Any] in
            return dict
        })
        .filter({ dict -> Bool in
            dict["ribs"] != nil
        })
        .filter({ dict -> Bool in
            dict["rib"] != nil
        })
        .flatMap({ dict -> Observable<[LCLRibAccount]> in

            //return either list of ribs or 1 single rib
            if let ribs = dict["ribs"] as? [String: Any] {
                return Observable.just(LCLRib.parseAccountList(with: ribs))
            }

            if let rib = dict["rib"] as? [String: Any] {
                return Observable.just([LCLRib.parseRib(with: rib)]) //wrap single object in array
            }

            return Observable.empty()
        })
}
...