iOS應(yīng)用組件化:
為什么需要組件化
- 在業(yè)務(wù)極速增大的情況下凹髓,各個(gè)團(tuán)隊(duì)并不知道其它團(tuán)隊(duì)具體的業(yè)務(wù)實(shí)現(xiàn)和跳轉(zhuǎn)孵坚,而且并不需要知道付枫,如何進(jìn)行各個(gè)業(yè)務(wù)的通信
- 當(dāng)業(yè)務(wù)增大的情況下掐隐,某個(gè)業(yè)務(wù)或許會(huì)被多個(gè)項(xiàng)目引用狗热,有可能還還被交叉使用,如何解決引用問題
我口中的組件化到底是神馬意思
解放大量的重復(fù)工作虑省,減少在各個(gè)項(xiàng)目集成時(shí)的困擾匿刮。比如我在做業(yè)務(wù)的時(shí)候,需要到支付系統(tǒng)手機(jī)收銀臺(tái)探颈,并行開發(fā)熟丸,這時(shí)候我不需要知道他那邊的進(jìn)度如何,他把一個(gè)url模式的東西給我伪节,我直接進(jìn)行url跳轉(zhuǎn)即可虑啤。
組件化的流程
- 啟動(dòng)時(shí)首先各個(gè)業(yè)務(wù)去組件中心進(jìn)行注冊(cè)
- 對(duì)各個(gè)業(yè)務(wù)組件進(jìn)行初始化
- 調(diào)用業(yè)務(wù)組件的url
用協(xié)議模式打開對(duì)應(yīng)Controller
在開發(fā)iOS的時(shí)候,經(jīng)常會(huì)遇到根據(jù)一個(gè)值為string的key去打開一個(gè)controller架馋,然后陪著一些參數(shù)耕肩。例如遠(yuǎn)程通知纳账,webview打開本地頁(yè)面等等蔼水∥坛眩或者兩個(gè)子模塊應(yīng)用并行開發(fā),需要在特定地方打開對(duì)方某個(gè)controller屏鳍。
打開某個(gè)controller勘纯,需要考慮的幾點(diǎn)東西:
- 如何得到指定的vc
- 參數(shù)傳遞
- 上級(jí)頁(yè)面的操作,如:訂單詳情钓瞭,返回上級(jí)頁(yè)面為訂單列表
這里我給一個(gè)指定的url:
xxxdemo://push/second/third?second[a]=1&second[b]=2&third[a]=3&third[b]=4&e=5&f[a][]=6&f[a][]=7&second[c][]=1&second[c][]=2
這里是標(biāo)準(zhǔn)的url格式驳遵,當(dāng)我們?cè)趨?shù)中需要添加一個(gè)url的時(shí)候,我們需要對(duì)url進(jìn)行urlencode再放入(例:xxxdemo://open/third?url=www.baidu.com%3Ftoken%3D123%26a%3D3&b=1)
1.如何得到指定的vc
方法 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|
使用對(duì)應(yīng)表 | 簡(jiǎn)單易懂山涡,而且性能比較好 | 擴(kuò)展性差堤结,難維護(hù) |
使用類名對(duì)應(yīng) | 簡(jiǎn)單,性能好鸭丛,擴(kuò)展好 | 比較蠢竞穷,android和iOS不通用 |
使用協(xié)議查詢 | 擴(kuò)展性好,便于維護(hù) | 在查詢過程會(huì)比其它方法消耗更多資源 |
這里我們使用第三種鳞溉,因?yàn)樽鳛橐粋€(gè)通用庫(kù)瘾带,考慮的更多是其它項(xiàng)目通用性,可擴(kuò)展性以及維護(hù)熟菲。
在庫(kù)中看政,我們會(huì)給出一個(gè)協(xié)議朴恳,當(dāng)業(yè)務(wù)方在業(yè)務(wù)中實(shí)現(xiàn)這個(gè)協(xié)議,那么就相當(dāng)于在我們的注冊(cè)表中注冊(cè)了允蚣,我們把對(duì)應(yīng)的內(nèi)容拿出來為映射的key值菜皂,然后存儲(chǔ)在我們的沙盒里面。下一次厉萝,只需要根據(jù)版本號(hào)是否增加,去判斷是否需要更新這個(gè)文件(當(dāng)然在debug環(huán)境下榨崩,是都更新的)谴垫。
在調(diào)用的時(shí)候,我們只需要去尋找這個(gè)key母蛛,然后根據(jù)value去找到這個(gè)class翩剪,最后把參數(shù)根據(jù)實(shí)現(xiàn)協(xié)議的另外一個(gè)方法傳入,如此便可彩郊。
使用url則是得到url里面的paths前弯、pathComponents,如果用pathComponents秫逝,需要移除:"/"恕出,然后根據(jù)paths去獲取不同的value,可以對(duì)應(yīng)多個(gè)viewcontroller违帆。
2.如何傳遞參數(shù)
如果打開單個(gè)viewcontroller浙巫,那么在viewcontroller里面實(shí)現(xiàn)協(xié)議,然后把url的query傳入即可刷后,但是有些時(shí)候的畴,我們會(huì)遇到一次打開多個(gè)頁(yè)面的情況。
首先尝胆,在對(duì)url進(jìn)行解析的時(shí)候丧裁,判斷是否為多個(gè)paths,單個(gè)則直接把所有query傳入含衔,多個(gè)煎娇,則先根據(jù)query里面的key值找出對(duì)應(yīng)那一個(gè)path的所有參數(shù),然后傳入
3.上級(jí)頁(yè)面的操作贪染,如:訂單詳情逊桦,返回上級(jí)頁(yè)面為訂單列表
這個(gè)問題在1中已經(jīng)解決。
這里的demo我不放出來抑进,如果需要思路可以直接找我