使用UI映射來簡化你的項(xiàng)目

上一版本扯了太多廢話缨伊,抱歉。

經(jīng)過一個(gè)項(xiàng)目的使用进宝,我個(gè)人的感覺是刻坊,就是好用!

總而言之党晋,這個(gè)玩意就是能少些一大堆賦值語句谭胚。也僅僅能少寫一大堆賦值語句。不想寫賦值語句的可以試試未玻,原理也很簡單漏益,大家可以試著自己封裝一個(gè),哈哈深胳。


WELUIMapping

代碼在這?

這玩意主要是為了去model绰疤。簡單的展示頁,都會有這么個(gè)流程舞终,把數(shù)據(jù)放到model里轻庆,緊接著再從model取出數(shù)據(jù)放到view里。干嘛要這樣折騰敛劝?直接放到View里不就好了余爆?

在這里,使用model最大好處就是替代dic[xxxx]這種代價(jià)很大的代碼夸盟,那么也就是說蛾方,能夠?qū)崿F(xiàn)不使用model,又能不用dic[xxx]這種代碼,一切就解決了不是桩砰?


準(zhǔn)備工作


很簡單拓春,用JSON字段名作為UI控件的變量名。

之后調(diào)用這個(gè)代碼亚隅。

[self mappingUIWithDictionary:jsonDic];

便完成了全部的賦值硼莽。

頭文件如下。


@interface NSObject (WELUIMapping)

-(void)mappingUIWithModel:(id)model;
-(void)mappingUIWithDictionary:(NSDictionary *)dictionary;

@end

之所以使用object分類的方式去實(shí)現(xiàn)煮纵,是為了兼容view和controller懂鸵。


對String的支持

例如。你有這么個(gè)json

{"name":"welcommand","age":"20"};


那么你需要建立這樣的ui行疏。

@property (nonatomic, strong) UILabel *name;
@property (nonatomic, strong) UILabel *age;



string的全局替換

如果你有這么個(gè)json

{"sex":"1"};

在你的項(xiàng)目中匆光,1表示男 2表示女。

可以注冊一個(gè)全局的文字解析方法酿联。

[[WELGlobalMappingRule globalRule] registerTextSplice:^NSString *(NSString *modelKey, NSString *modelValue) {
??????? if([modelKey isEqualToString:@"sex"]) {
??????????? if([modelValue isEqualToString:@"1"]) {
??????????????? return @"男";
??????????? } else {
??????????????? return @"女";
??????????? }
??????? }
??????? return nil;
??? }];

之后殴穴,你的json就相當(dāng)于變成了這樣

{"sex":"男"};

string的局部替換


如果你并不希望全局替換。那么可以在需要變化的ui類中實(shí)現(xiàn)這個(gè)協(xié)議

@protocol WELMappingCustom <NSObject>

之后 實(shí)現(xiàn)這個(gè)方法

-(NSString *)customTextSplice:(NSString *)UIkey modelValue:(NSString *)value;

圖片的支持

如果你的的控件是UIImageView或者UIButton,并且json字段的內(nèi)容是url货葬,那么便可以實(shí)現(xiàn)自動(dòng)的圖片賦值。

在這里劲够,需要你把你的圖片請求方法和url拼接方法注冊到WELGlobalMappingRule中

??? [[WELGlobalMappingRule globalRule] registerImageURLSplice:^NSString *(NSString *modelKey, NSString *subURLString) {
??????? return? [[NSString alloc] initWithFormat:@"%@%@",baseURL,subURLString];
??? }];

??? [[WELGlobalMappingRule globalRule] registerImageRequest:^(UIImageView *imageView, NSURL *URL) {
??????? // 你自己的圖片異步加載方法
??? }];

之后就可以完成自動(dòng)映射震桶。

PS,url拼接留出一個(gè)modelKey征绎,主要是防止有的接口傳回的是絕對路徑蹲姐。可以根據(jù)modelKey去判斷人柿,選擇相應(yīng)的拼接方法柴墩。

創(chuàng)建全局相等字段

主要是為了解決uid,user_id這種字段不統(tǒng)一的問題凫岖。

[[WELGlobalMappingRule globalRule] addSameMeaningKeys:@[@"user_id",@"uid"]];

加上這句話江咳,以后映射的時(shí)候,就可以將uid和user_id當(dāng)成一個(gè)字段處理哥放。

一些事件判斷

目前寫的比較簡單歼指,這個(gè)主要是考慮到,有時(shí)候我們要根據(jù)一個(gè)model中的type來改變一些布局甥雕,比如顏色踩身。我在這里留了個(gè)回調(diào),用來處理這些事情社露。同樣是實(shí)現(xiàn)WELMappingCustom協(xié)議挟阻。

-(void)customValueEvent:(NSString *)modelKey modelValue:(NSString *)modelValue;

多字段的映射。

有時(shí)候,需要把兩個(gè)字段映射到一個(gè)label中附鸽。這時(shí)候脱拼。需要實(shí)現(xiàn)WELMappingCustom中的

-(NSString *)customTextSplice:(NSString *)UIkey modelDictionary:(NSDictionary *)modelDictionary;

這個(gè)回調(diào)會把整個(gè)字段傳過來,可以在這里面進(jìn)行字符串拼接拒炎。

局限性

這個(gè)映射設(shè)計(jì)時(shí)挪拟,初衷是為了去掉簡單的model。如果你經(jīng)常會使用到后兩個(gè)回調(diào)击你,那就應(yīng)該考慮玉组,是否建立一個(gè)model是更加合適的方法。當(dāng)然丁侄,后續(xù)惯雳,我也會繼續(xù)探索,類似后兩種需求鸿摇,有沒有更加優(yōu)雅的方式去實(shí)現(xiàn)石景。

以上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拙吉,隨后出現(xiàn)的幾起案子潮孽,更是在濱河造成了極大的恐慌,老刑警劉巖筷黔,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件往史,死亡現(xiàn)場離奇詭異,居然都是意外死亡佛舱,警方通過查閱死者的電腦和手機(jī)椎例,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來请祖,“玉大人订歪,你說我怎么就攤上這事∷敛叮” “怎么了刷晋?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長慎陵。 經(jīng)常有香客問我掏秩,道長,這世上最難降的妖魔是什么荆姆? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任蒙幻,我火速辦了婚禮,結(jié)果婚禮上胆筒,老公的妹妹穿的比我還像新娘邮破。我一直安慰自己诈豌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布抒和。 她就那樣靜靜地躺著矫渔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摧莽。 梳的紋絲不亂的頭發(fā)上庙洼,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音镊辕,去河邊找鬼油够。 笑死,一個(gè)胖子當(dāng)著我的面吹牛征懈,可吹牛的內(nèi)容都是我干的石咬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卖哎,長吁一口氣:“原來是場噩夢啊……” “哼鬼悠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亏娜,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤焕窝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后维贺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體它掂,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年幸缕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晰韵。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡发乔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雪猪,到底是詐尸還是另有隱情栏尚,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布只恨,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咱圆。R本人自食惡果不足惜手幢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一匈睁、第九天 我趴在偏房一處隱蔽的房頂上張望软舌。 院中可真熱鬧佛点,春花似錦鸳玩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厢拭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間回季,已是汗流浹背颤殴。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工帖蔓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哨啃。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像珍特,于是被迫代替她去往敵國和親祝峻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 概述 ? iOS源碼解析—YYModel(YYClassInfo)分析了如何根據(jù)OC的Class對象構(gòu)建...
    egoCogito_panf閱讀 11,579評論 4 32
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理扎筒,服務(wù)發(fā)現(xiàn)莱找,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中嗜桌。奥溺。。 其實(shí)如果沒有APIManager這一層是沒法使用delegate的症脂,畢竟多個(gè)單...
    yhtang閱讀 5,192評論 1 23
  • 閱讀完本書谚赎,首先給我的感覺是內(nèi)容有點(diǎn)對不起它的¥59.80定價(jià)淫僻,全書主要講了兩塊內(nèi)容诱篷,一塊是SQLite3,...
    瑞小萌閱讀 2,832評論 4 33
  • 再遇任賢雳灵,了卻了一樁念想棕所。 今天去醫(yī)院換完藥然后和張先生去超市買東西,一轉(zhuǎn)身竟然看見了任賢悯辙!就是任賢琳省!不知道出于什...
    立夏LX閱讀 381評論 0 3