iOS-組件化之路由方案

組件化

- 下圖為我設想中的組件化流程圖:
![組件化流程圖.png](http://upload-images.jianshu.io/upload_images/1832614-e3369469075058ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 業(yè)務模塊層
    • 組件化的目標是為了實現不同業(yè)務模塊之間的獨立性,從而使業(yè)務開發(fā)更專注于單個模塊.
    我傾向于利用cocoapods私有庫管理多個模塊
    - 優(yōu)勢:
      - 可以使用pod方便集成
      - 可以使用tag進行版本切換
    一些阻礙:
     - cocoapods私有庫只能依賴公有庫,所以必須將基礎組件層暴露出來(既要暴露出來!當然要大家一起用啦!!)
     - 一些共用自定義UI組件,這部分經過劃分后歸到業(yè)務模塊調用
     - 基礎的項目環(huán)境文件(定制的網絡接口/數據解析之類的),只能通過建立模板私有庫的方式解決(一旦更新就很絕望,幸好這部分不常變...)
    

路由方案 - SPRoutable :Github傳送門

gif.gif
  • 示例

    • 建立目標類用于接受Routable調用

      • 目標類為swift,且存在于Frameworks中,則需要在頭部添加@objc(類名)
      • 目標類只會init一次,除非手動清除
      • 類名與函數名具有默認前綴(可自行配置)
      • swift示例:
    @objc(Router_swift)
    class Router_swift: NSObject {
      var flag = true
    
      func router_a(params:[String: Any]) -> UIViewController {
        let vc = UIViewController()
        vc.view.backgroundColor = UIColor.blue
        return vc
      }
    
      func router_b() -> UIView {
        let view = UIView()
        view.frame = CGRect(x: 0, y: 300, width: 300, height: 300)
        view.backgroundColor = flag ? UIColor.red : UIColor.blue
        flag = !flag
        return view
      }
    
      func router_c(params: [String: Any] = [:]) {
        let alert = UIAlertController()
        alert.title = #function
        alert.message = params.description
        let action = UIAlertAction(title: "確定",
                                   style: UIAlertActionStyle.cancel,
                                   handler: nil)
        alert.addAction(action)
        UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
      }
    }
    
    • 可以這樣使用:
     get viewController:
     guard let vc = Routable.viewController(url: "http://swift/a") else { return }
      
     get view:
     guard let v = Routable.view(url: "http://swift/b") else { return }
    
     get object:
     guard let v: UIView = Routable.object(url: "http://swift/b") else { return }
    
     get function:
     Routable.executing(url: str)
    
  • 路由配置參數配置:

    Routable.classPrefix = "Router_"  // defalut: "Router_"
    Routable.funcPrefix  = "router_"  // defalut: "router_"
    Routable.paramName   = "Params"   // defalut: "Params"
    Routable.scheme      = "scheme"   // defalut: ""
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,628評論 4 61
  • 前言 隨著用戶的需求越來越多,對App的用戶體驗也變的要求越來越高。為了更好的應對各種需求,開發(fā)人員從軟件工程的角...
    一縷殤流化隱半邊冰霜閱讀 88,179評論 214 1,098
  • 以前上學寫作文,我最喜歡的文體是議論文,總寫不好記敘文。因為我是一個過于理性的人,喜歡說理,不會講故事。工作多年后...
    東安先生閱讀 470評論 0 0
  • 蘭芷手輕輕拍打著那人背部,來緩解那人劇烈的咳嗽。 男子咳嗽雖有緩解,但咳嗽的依舊很是厲害。 蘭芷眉骨緊鎖,抬頭欲要...
    采頃閱讀 234評論 0 0

友情鏈接更多精彩內容