一些 RxSwift 思考题

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

# 取消一个请求

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

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

# 确保获取最新的结果

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

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

# 多个异步请求

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

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

# 重复请求

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

# Cell 复用怎么办

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

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

# flatMap 同一个实例会怎么样

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

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

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

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

# invokeMethodsendMessage 的区别

# 如何重复执行某个操作?

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