組件化
- 下圖為我設想中的組件化流程圖:

- 業(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: ""