RxSwift使用小记

大神打扰一下,RxSwift使用小记
最新回答
不与情长

2026-03-14 01:14:36

最近的一个项目使用 RxSwift 开发,的确遇到不少问题。其中一些是 RxSwift 本身的问题,无法解决,只能忍受或者采取其他方式。现在给我总体的感觉是, RxSwift 的优势和劣势各占一半,所以,并不是强烈推荐,而是一种可用可不用的态度。

一般APP用的最多的控件就是 UITableview , RxCocoa 里有对 UITableview 的封装,但是有个限制,就是,所有的 cell 所绑定的 model 必须是同一个类型。也就是说,如果我的这个 tableview 里有不同的 cell 存在,那是实现不了的。为了弥补这个很明显的不足, RxSwift社区 给出了另外一个补充的库 RxDataSources 。这个库最大的不同就是可以实现多个 Section ,所以,上面提到的一个 tableview 如何包含不同的类型的 cell 问题就可以通过在不同 section 里来实现不同的 cell 来解决。多么烂的一个解决方法!!!一有不同的 cell 就来一个 section !

另外从 RxDataSources 的名字可以看出来,它只实现了 DataSource 的方法,也就是我们说的 DataSourceDelegate 里的方法。如果要调用 UITableViewDelegate 方法还需要继续使用 RxCocoa 里的 TableView 扩展。所以,无论如何也避免不了各种混用!

写 RxSwift 的网络部分,一般都推荐用 Moya , Moya 有对 RxSwift 的扩展。

我需要请求的 API , get 请求:

http://api.xxx.com/org/LoadOrganizationUsers?orgId=6


这个是一个非常普通的URL

结果请求地址为:

https://www.xxx.com/api/org/LoadOrganizationUsers%3ForgId=2&loadChild=true


这里的问号被转码成 %3F ,导致请求失败。

咋一看,第一想到自己的用法不对,应该是有地方设置 URLEncode 之类的,很可惜, Moya 没有提供这类方法。通过 google 找到 解决办法 ,依然是很烂的方法!

简单说就是,将带问号的地址放到baseURL里

很尴尬,都可以带参数了,还叫 baseURL 吗?