iOS使用RxSwift跟踪异步网络调用何时完成

iOS使用RxSwift跟踪异步网络调用何时完成,ios,rx-swift,Ios,Rx Swift,我正在努力将RxSwift集成到我的项目中 我编写了一个异步网络请求,其结果是在回调闭包上传递 这是我的网络功能 func discoverMovies(for url: String, withPage page: Int, success: @escaping(Bool)->()) { let requestUrl = "\(url)&page=\(page)" requestGETURL(requestUrl, success: { (js

我正在努力将RxSwift集成到我的项目中

我编写了一个异步网络请求,其结果是在回调闭包上传递

这是我的网络功能

func discoverMovies(for url: String, withPage page: Int, success: @escaping(Bool)->()) {

        let requestUrl = "\(url)&page=\(page)"

        requestGETURL(requestUrl, success: { (json) in

            self.createOrUpdateMoviesList(from: json)   
            success(true)

        }) { (error) in
            print("Could not download due to \(error)")
            success(false)
        }
    }

我的问题是,我们如何注册一个观察网络调用结果的可观察对象(成功为真或假),以便我们可以根据结果编写附加句柄。附加代码将仅在网络完成后执行。

我将把您的函数包装成Rx函数:

func discoverMovies(for url: String, withPage page: Int) -> Observable<MoviesList>{
    Observable.create{ observer in 

        let requestUrl = "\(url)&page=\(page)"

        self.requestGETURL(requestUrl, success: { (json) in

            // your createOrUpdateMoviesList(from:) function returns a MoviesList
            let moviesList = self.createOrUpdateMoviesList(from: json)   
            observer.onNext(moviesList)
            observer.onCompleted()

        }) { (error) in
            print("Could not download due to \(error)")
            observer.onError(error)
        }

        return Disposables.create()
    }
}

func otherFunction(withMovies list: MoviesList) -> Observable<Something> {
    // blah blah blah...
}

您可以确定,只有在DiscoveryMovies获得成功结果时,才会调用Other函数。

我会将您的函数包装为Rx函数:

func discoverMovies(for url: String, withPage page: Int) -> Observable<MoviesList>{
    Observable.create{ observer in 

        let requestUrl = "\(url)&page=\(page)"

        self.requestGETURL(requestUrl, success: { (json) in

            // your createOrUpdateMoviesList(from:) function returns a MoviesList
            let moviesList = self.createOrUpdateMoviesList(from: json)   
            observer.onNext(moviesList)
            observer.onCompleted()

        }) { (error) in
            print("Could not download due to \(error)")
            observer.onError(error)
        }

        return Disposables.create()
    }
}

func otherFunction(withMovies list: MoviesList) -> Observable<Something> {
    // blah blah blah...
}

您可以确定,只有在DiscoveryMovies获得成功的情况下,才会调用Other函数。

非常感谢,非常满意。这里的关键是flatmap函数。我会尽力去实现它,很多时候我都能达到理想状态。这里的关键是flatmap函数。我会努力实现它