如何过滤Driver< [Repository]> rxswift中的对象

时间:2017-08-24 18:28:51

标签: ios swift rx-swift

struct SearchViewModel {
    lazy var rx_SearchResults: Driver<[Repository]> = self.fetchSearchResults()
    lazy var rx_FilteredSearchResults: Driver<[Repository]> = self.filteredSearchResults()
    fileprivate var searchQuery: Observable<String>
    fileprivate var scopeIndex:  Observable<Int>
init( searchTextObservable: Observable<String>, changeInScopeIndex: Observable<Int>)
    {
        self.searchQuery = searchTextObservable
        self.scopeIndex = changeInScopeIndex

    }
fileprivate func fetchRepositories() -> Driver<[Repository]> {
        return repositoryName
            .subscribeOn(MainScheduler.instance) // Make sure we are on MainScheduler
            .do(onNext: { response in
                UIApplication.shared.isNetworkActivityIndicatorVisible = true
            })
            .observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
            .flatMapLatest { text in // .background thread, network request
                return RxAlamofire
                    .requestJSON(.get, "https://api.github.com/users/\(text)/repos")
                    .debug()
                    .catchError { error in
                        return Observable.never()
                    }
            }
            .observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
            .map { (response, json) -> [Repository] in // again back to .background, map objects
                if let repos = Mapper<Repository>().mapArray(JSONObject: json) {
                    return repos
                } else {
                    return []
                }
            }
            .observeOn(MainScheduler.instance) // switch to MainScheduler, UI updates
            .do(onNext: { response in
                UIApplication.shared.isNetworkActivityIndicatorVisible = false
            })
            .asDriver(onErrorJustReturn: []) // This also makes sure that we are on MainScheduler
    }

}

现在我正在尝试像这样过滤searchResults

    **fileprivate  func filteredSearchResults() -> Driver<[FilesListSearchData]> {
        return scopeIndex
            .subscribeOn(MainScheduler.instance) // Make sure we are on MainScheduler
            .do(onNext: { response in
                UIApplication.shared.isNetworkActivityIndicatorVisible = true
            })
            .observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
            .map { index in // again back to .background, map objects
                return self.rx_SearchResults.asDriver()
            }
            .observeOn(MainScheduler.instance) // switch to MainScheduler, UI updates
            .do(onNext: { response in
                UIApplication.shared.isNetworkActivityIndicatorVisible = false
            })


}**

//上面的方法是错的我被困住了如何根据范围索引过滤数据。

正如你们所知,我正在使用MVVM,我有两个问题。

  1. 如何通过此行显示我的视图控制器上的进度

            UIApplication.shared.isNetworkActivityIndicatorVisible = false/true
    
  2. 如何根据所选范围索引过滤驱动程序。

0 个答案:

没有答案