如何使用 RxSwift 获取分页页面的所有页面 url

How to get all page url of a paginated page with RxSwift

我正在开始我的第一个 RxSwift 项目。

我想要此页的所有分页 url : http://mangafox.me/directory/ 至此,我可以获取到下一页url。 这是到目前为止使用的代码:

    func getNextPageUrl(currentStringUrl: String) -> Observable<String> {
    return Observable.create { observer -> Disposable in
        let request = Alamofire.request(currentStringUrl)
            .validate()
            .responseString { response in
                if response.result.isSuccess {
                    if let doc = HTML(html: response.result.value!, encoding: .utf8) {
                        if let nextPage = doc.css("a > span.next").first?.parent {
                            observer.onNext("\(currentStringUrl)\(nextPage["href"]!)")
                        }
                    }
                    observer.onCompleted()
                }else{
                    observer.onError(response.result.error!)
                }
        }

        return Disposables.create {
            request.cancel()
        }
    }
}

现在我想做一个其他下一个分页的字符串列表link。我该怎么做?

我找到了自己的方法:

func getAllMangaPage() -> Observable<String>{
    return Observable.create { observer in

        var urls :[String] = []
        let subs = self.repeatEvery(second: 0.2)
            .subscribe { event in
                if urls.isEmpty {
                    urls.append(self.popularMangaInitialUrl())
                }else{
                    self.getNextPageUrl(currentStringUrl: urls.last!)
                        .subscribe(
                            onNext: { url in
                                var nextUrl = url as String
                                if !nextUrl.contains("http://") {
                                    let completeUrl = "\(self.popularMangaInitialUrl())\(nextUrl)"
                                    if !urls.contains(completeUrl){
                                        urls.append("\(self.popularMangaInitialUrl())\(nextUrl)")
                                        observer.onNext(urls.last!)
                                    }
                                }else{
                                    if !urls.contains(nextUrl){
                                        urls.append(nextUrl)
                                        observer.onNext(urls.last!)
                                    }
                                }
                            },
                            onCompleted: {

                            },
                            onDisposed: {

                            }
                    )
                }
        }

        return Disposables.create {
            print("Disposed")
            subs.dispose()
        }
    }
}