我对RxSwift很失望
最近的一个项目使用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
扩展。所以,无论如何也避免不了各种混用!
Moya路径中包含问号的解决办法
写RxSwift
的网络部分,一般都推荐用Moya
,Moya
有对RxSwift
的扩展。
我需要请求的API
,get
请求:
http://api.xxx.com/org/LoadOrganizationUsers?orgId=6
这个是一个非常普通的URL
var baseURL: URL {
return URL(string: "https://www.xxx.com/api/")!
}
var path: String {
switch self {
case .loadOrganizationUsers(let orgId):
return "org/LoadOrganizationUsers?orgId=\(orgId)&loadChild=true"
}
}
结果请求地址为:
https://www.xxx.com/api/org/LoadOrganizationUsers%3ForgId=2&loadChild=true
这里的问号被转码成%3F
,导致请求失败。
咋一看,第一想到自己的用法不对,应该是有地方设置URLEncode
之类的,很可惜,Moya
没有提供这类方法。通过google
找到解决办法,依然是很烂的方法!
简单说就是,将带问号的地址放到baseURL里
var baseURL: URL {
switch self {
case .loadOrganizationUsers(let orgId):
return URL(string: "https://www.xxx.com/api/org/LoadOrganizationUsers?orgId=\(orgId)&loadChild=true")!
default:
return URL(string: "https://www.xxx.com/api/")!
}
}
很尴尬,都可以带参数了,还叫baseURL
吗?
网友评论