iOS路由(MGJRouter)的實(shí)現(xiàn)
背景
最開始想做路由,是因?yàn)楫?dāng)時(shí)app中有大量與H5之間的交互,原生和H5的跳轉(zhuǎn)操作比較多比較頻繁,新增一個(gè)跳轉(zhuǎn)又涉及到改代碼發(fā)版本,為了統(tǒng)一iOS、安卓和H5的跳轉(zhuǎn),引入了路由。
作用
后來發(fā)現(xiàn)路由,還可很多作用。Router就像是個(gè)調(diào)度中心,各個(gè)模塊通過路由調(diào)度其他模塊,模塊之間不需要相互引用,調(diào)度方式更加統(tǒng)一,更加自由,能夠?qū)崿F(xiàn)解耦的作用,同時(shí)也為之后的組件化開發(fā)提供了基礎(chǔ)。
路由選擇
目前github優(yōu)秀的路由設(shè)計(jì)已經(jīng)有很多,如JLRoutes,MGJRouter,CTMediator。
JLRoutes提供的功能比較復(fù)雜,有很多我個(gè)人用不上的功能,所以沒有選擇。
CTMediator更適合業(yè)務(wù)比較復(fù)雜的情況,MGJRouter的使用上更加容易上手,功能也比較簡單,更加適用于頁面跳轉(zhuǎn)這種業(yè)務(wù)比較多的場景。所以我項(xiàng)目中選擇了MGJRouter
JLRoutes
- 集成簡單
- 可以處理各種各樣的url
- 支持通配符
- 支持多個(gè)scheme
- 比較純粹,不支持打開頁面后的值回傳。要自己再加工。
MGJRouter
- 代碼簡單易懂
- 功能全面
- 支持push值回傳
- 支持多scheme
- openUrl時(shí)支持一個(gè)userInfo (造成了跟系統(tǒng)的不統(tǒng)一,多出來的參數(shù)還是可以放到url中,傳對(duì)象的時(shí)候有點(diǎn)用)(模塊內(nèi)部傳對(duì)象可以用,模塊間的話不應(yīng)該傳對(duì)象,會(huì)造成耦合)
MGJRouter
MGJRouter就一個(gè)單例類,使用前需要通過注冊組件,調(diào)用方通過URL調(diào)用服務(wù)方頁面,通過路由表的映射關(guān)系進(jìn)行關(guān)聯(lián),調(diào)用方可以傳入復(fù) 雜的參數(shù)、對(duì)象等。
基本跳轉(zhuǎn)主要是注冊組件,調(diào)用openURl方法,傳入?yún)?shù)即可實(shí)現(xiàn)。
[MGJRouter registerURLPattern:@"mgj://foo/bar" toHandler:^(NSDictionary *routerParameters) { NSLog(@"routerParameterUserInfo:%@", routerParameters[MGJRouterParameterUserInfo]); }]; [MGJRouter openURL:@"mgj://foo/bar"];
使用一個(gè)類來統(tǒng)一管理注冊的方法,再load方法中進(jìn)行注冊,就不會(huì)到處看到注冊的代碼,方便管理。
url注冊管理類
很多人說沒有反向傳值的方法,其實(shí)和我們其他跳轉(zhuǎn)一樣,傳參數(shù)的時(shí)候使用block即可解決。
[MGJRouter openURL:@"LWT://Test3/PushMainVC"withUserInfo:@{ @"navigationVC" : self.navigationController, @"block":^(NSString * text){NSLog(@"%@",text); }, } completion:nil];
代碼下載
demo中有MGJRouter各個(gè)方法的使用案例,包括跳轉(zhuǎn),獲取組件,正反向傳參。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
KVO實(shí)現(xiàn)自定義文件復(fù)制進(jìn)度效果
這篇文章主要為大家詳細(xì)介紹了KVO實(shí)現(xiàn)自定義文件復(fù)制進(jìn)度效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08iOS實(shí)現(xiàn)支付寶螞蟻森林隨機(jī)按鈕及抖動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)支付寶螞蟻森林隨機(jī)按鈕及抖動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02iOS 檢測網(wǎng)絡(luò)狀態(tài)的兩種方法
一般有Reachability和AFNetworking監(jiān)測兩種方式,都是第三方的框架,下文逐一詳細(xì)給大家講解,感興趣的朋友一起看看吧2016-10-10iOS實(shí)現(xiàn)文字水平無間斷滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)文字水平無間斷滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08IOS UITableViewCell詳解及按鈕點(diǎn)擊事件處理實(shí)例
這篇文章主要介紹了IOS UITableViewCell詳解及按鈕點(diǎn)擊事件處理實(shí)例的相關(guān)資料,這里附有示例代碼,大家可以看下如何實(shí)現(xiàn)按鍵點(diǎn)擊事件,需要的朋友可以參考下2016-12-12Objective-C的緩存框架EGOCache在iOS App開發(fā)中的使用
這篇文章主要介紹了Objective-C的緩存框架EGOCache在iOS App開發(fā)中的使用,重點(diǎn)講解了EGOCache對(duì)緩存過期時(shí)間的檢測及處理,需要的朋友可以參考下2016-05-05詳解iOS應(yīng)用開發(fā)中autoresizing尺寸自動(dòng)適應(yīng)屬性的用法
這篇文章主要介紹了iOS應(yīng)用開發(fā)中autoresizing尺寸自動(dòng)適應(yīng)屬性的用法,文中講解了使用代碼和Storyboard兩種方式調(diào)節(jié)autoresizing的方法,示例代碼為Objective-C,需要的朋友可以參考下2016-03-03