RxSwift使用小記

我對RxSwift很失望

最近的一個項目使用RxSwift開發(fā),的確遇到不少問題。其中一些是RxSwift本身的問題,無法解決,只能忍受或者采取其他方式?,F(xiàn)在給我總體的感覺是,RxSwift的優(yōu)勢和劣勢各占一半,所以,并不是強(qiáng)烈推薦,而是一種可用可不用的態(tài)度。

一般APP用的最多的控件就是UITableviewRxCocoa里有對UITableview的封裝,但是有個限制,就是,所有的cell所綁定的model必須是同一個類型。也就是說,如果我的這個tableview里有不同的cell存在,那是實現(xiàn)不了的。為了彌補這個很明顯的不足,RxSwift社區(qū)給出了另外一個補充的庫RxDataSources。這個庫最大的不同就是可以實現(xiàn)多個Section,所以,上面提到的一個tableview如何包含不同的類型的cell問題就可以通過在不同section里來實現(xiàn)不同的cell來解決。多么爛的一個解決方法?。?!一有不同的cell就來一個section!

另外從RxDataSources的名字可以看出來,它只實現(xiàn)了DataSource的方法,也就是我們說的DataSourceDelegate里的方法。如果要調(diào)用UITableViewDelegate方法還需要繼續(xù)使用RxCocoa里的TableView擴(kuò)展。所以,無論如何也避免不了各種混用!

Moya路徑中包含問號的解決辦法

RxSwift的網(wǎng)絡(luò)部分,一般都推薦用Moya,Moya有對RxSwift的擴(kuò)展。

我需要請求的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嗎?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容