思考这些问题可以帮助你更好的理解什么是订阅、Observable 有什么特性、如何比较优雅地写 Rx 代码。

取消一个请求

请求一个列表数据时,切换新的分类,取消上一次的网络请求(如果未完成)。该使用什么操作符?

单纯地发送一个请求,如何取消该网络请求?该使用什么操作符?

确保获取最新的结果

在进行一些操作时,我们可能需要获取某些最新的值,比如一个下单页面,点击确定,总是应当带上订单最新的数据。该使用什么操作符?可以使用 combineLatest 吗?可以使用 withLatestFrom 吗?可以使用 flatMap 吗?

如果可以,他们有什么区别吗?

多个异步请求

依次发送两个请求,第二个请求需要第一个请求的参数和响应结果,该如何组织操作符?列举几种?

如何跟踪上述请求状态?该使用什么操作符?

重复请求

点击一个按钮发送一个请求,当该请求完成前,该按钮点击都不应该继续发送请求。该使用什么操作符?

Cell 复用怎么办

遇到过 Cell 中使用 Button 重复订阅问题吗?如何解决比较好?

解决复用后,将一个 Button 点击绑定到一个 PublishSubject 可能会有什么问题?

flatMap 同一个实例会怎么样

创建一个 Observable ,每当订阅该 Observable 都将发送一个请求,每次请求带上一个的随机的 uuid

请配合 RxCocoa 提供的 URLSession 扩展方法完成。

检查输入结果是否和最初第一个值相同

创建一个操作符,可以检查输入结果是否和最初的一样。比如一个 TextField 最初是 text1 ,经过一顿乱输,如何判断最终输入结果是否和最初相同?请尽量复用该操作符到各个场景。

invokeMethodsendMessage 的区别

如何重复执行某个操作?

比如,发送一个网络请求后,点击 Button 可以重复发送一个该网络请求。创建一个操作符以复用。