美文网首页
RxSwift使用小记

RxSwift使用小记

作者: 桔子听 | 来源:发表于2018-06-26 10:53 被阅读28次

    我对RxSwift很失望

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

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

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

    Moya路径中包含问号的解决办法

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

    我需要请求的APIget请求:

    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吗?

    相关文章

      网友评论

          本文标题:RxSwift使用小记

          本文链接:https://www.haomeiwen.com/subject/iyupyftx.html