我對RxSwift很失望
最近的一個項目使用RxSwift
開發(fā),的確遇到不少問題。其中一些是RxSwift
本身的問題追驴,無法解決眉枕,只能忍受或者采取其他方式《窀矗現(xiàn)在給我總體的感覺是,RxSwift
的優(yōu)勢和劣勢各占一半速挑,所以谤牡,并不是強烈推薦,而是一種可用可不用的態(tài)度姥宝。
一般APP用的最多的控件就是UITableview
翅萤,RxCocoa
里有對UITableview
的封裝,但是有個限制腊满,就是套么,所有的cell
所綁定的model
必須是同一個類型。也就是說碳蛋,如果我的這個tableview
里有不同的cell
存在违诗,那是實現(xiàn)不了的。為了彌補這個很明顯的不足疮蹦,RxSwift社區(qū)給出了另外一個補充的庫RxDataSources诸迟。這個庫最大的不同就是可以實現(xiàn)多個Section
,所以愕乎,上面提到的一個tableview
如何包含不同的類型的cell
問題就可以通過在不同section
里來實現(xiàn)不同的cell
來解決阵苇。多么爛的一個解決方法!8新邸绅项!一有不同的cell
就來一個section
!
另外從RxDataSources
的名字可以看出來比肄,它只實現(xiàn)了DataSource
的方法快耿,也就是我們說的DataSourceDelegate
里的方法囊陡。如果要調(diào)用UITableViewDelegate
方法還需要繼續(xù)使用RxCocoa
里的TableView
擴展。所以掀亥,無論如何也避免不了各種混用撞反!
Moya路徑中包含問號的解決辦法
寫RxSwift
的網(wǎng)絡(luò)部分,一般都推薦用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"
}
}
結(jié)果請求地址為:
https://www.xxx.com/api/org/LoadOrganizationUsers%3ForgId=2&loadChild=true
這里的問號被轉(zhuǎn)碼成%3F
到逊,導(dǎo)致請求失敗骆姐。
咋一看,第一想到自己的用法不對幢踏,應(yīng)該是有地方設(shè)置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/")!
}
}
很尷尬,都可以帶參數(shù)了敛助,還叫baseURL
嗎粗卜?