系統(tǒng)Foundation框架為我們提供了一些方法反射的API,我們可以通過這些API執(zhí)行將字符串轉(zhuǎn)為SEL等操作。由于OC語言的動態(tài)性,這些操作都是發(fā)生在運行時的。
通過這些方法,我們可以在運行時選擇創(chuàng)建那個實例,并動態(tài)選擇調(diào)用哪個方法。這些操作甚至可以由服務(wù)器傳回來的參數(shù)來控制,我們可以將服務(wù)器傳回來的類名和方法名,實例為我們的對象。
反射機制使用技巧
假設(shè)有一天公司產(chǎn)品要實現(xiàn)一個需求:根據(jù)后臺推送過來的數(shù)據(jù),進行動態(tài)頁面跳轉(zhuǎn),跳轉(zhuǎn)到頁面后根據(jù)返回到數(shù)據(jù)執(zhí)行對應(yīng)的操作。
遇到這樣奇葩的需求,我們當(dāng)然可以問產(chǎn)品都有哪些情況執(zhí)行哪些方法,然后寫一大堆if else判斷或switch判斷。 但是這種方法實現(xiàn)起來太low了,而且不夠靈活,假設(shè)后續(xù)版本需求變了,還要往其他已有頁面中跳轉(zhuǎn),這不就傻眼了嗎.... 這種情況反射機制就派上用場了,我們可以用反射機制動態(tài)的創(chuàng)建類并執(zhí)行方法。當(dāng)然也可以通過runtime來實現(xiàn)這個功能,但是我們當(dāng)前需求反射機制已經(jīng)足夠滿足需求了,如果遇到更加復(fù)雜的需求可以考慮用runtime來實現(xiàn)。 這時候就需要和后臺配合了,我們首先需要和后臺商量好返回的數(shù)據(jù)結(jié)構(gòu),以及數(shù)據(jù)格式、類型等,返回后我們按照和后臺約定的格式,根據(jù)后臺返回的信息,直接進行反射和調(diào)用即可。
假設(shè)和后臺約定格式如下:
定義一個UserListViewController類,這個類用于測試,在實際使用中可能會有多個這樣的控制器類。
下面通過反射機制簡單實現(xiàn)了控制器跳轉(zhuǎn)的方法,在實際使用中再根據(jù)業(yè)務(wù)需求進行修改即可。因為這篇文章主要是講反射機制,所以沒有使用runtime代碼。
簡單封裝的頁面跳轉(zhuǎn)方法,只是做演示,代碼都是沒問題的,使用時可以根據(jù)業(yè)務(wù)需求進行修改。