国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

iOS開發(fā)--BaseModel

2019-11-14 18:21:15
字體:
供稿:網(wǎng)友

  軟件開發(fā)過程中,需要解析各種各樣的數(shù)據(jù).如最基礎(chǔ)的plist文件,從網(wǎng)絡(luò)下載獲取的json數(shù)據(jù),以及xml網(wǎng)頁數(shù)據(jù),還有比較重要的Core Data數(shù)據(jù).

  下面我來分享一種快速將json文件中的字典轉(zhuǎn)為模型的方法.雖然很多人在用第三方類庫解析json數(shù)據(jù),不過將json文件中的字典轉(zhuǎn)為模型內(nèi)部的實現(xiàn)原理還是需要了解一下的.

  下面是BaseModel.h聲明文件,向外界開方了兩個方法:

  第7行的方法是實現(xiàn)json文件中的字典轉(zhuǎn)模型;

  第10行方法是防止出現(xiàn)特殊類型的數(shù)據(jù)無法轉(zhuǎn)為模型而導(dǎo)致程序異常.

 1 BaseModel.h 2  3 #import <Foundation/Foundation.h> 4  5 @interface BaseModel : NSObject 6  7 - (instancetype)initWithDictionary:(NSDictionary *)jsonDictionary; 8  9 // 將json中的value值交給model的屬性(覆寫該方法可以將json文件中特殊的數(shù)據(jù)加到model中)特殊類型如:NSNull類型數(shù)據(jù)10 - (void)setAttributesWithDictionary:(NSDictionary *)jsonDict;11 12 @end

  

  下面是BaseModel.m實現(xiàn)文件

 

 1 BaseModel.m 2  3 #import "BaseModel.h" 4  5 @implementation BaseModel 6  7 - (instancetype)initWithDictionary:(NSDictionary *)jsonDictionary 8 { 9     self = [super init];10     11     if (self) {12         // 將jsonDictionary字典的value值交給model的屬性值13         [self setAttributesWithDictionary:jsonDictionary];14     }15     return self;16 }17 18 // 將jsonDictionary字典的value值交給model的屬性值19 - (void)setAttributesWithDictionary:(NSDictionary *)jsonDictionary20 {21     // 獲取映射關(guān)系22     NSDictionary *modelDictionary = [self attributesModel:jsonDictionary];23     24     for (NSString *jsonKey in modelDictionary) {25         // 取得屬性名26         NSString *modelAttributesNmae = [modelDictionary objectForKey:jsonKey];27         28         // 取得Value值29         id jsonValue = [jsonDictionary objectForKey:jsonKey];30         31         // 獲取屬性的setter方法32         SEL setterSEL = [self stringToSEL:modelAttributesNmae];33         34         // 如果Value值為NULL,則賦值為""(什么也沒有)35         if ([jsonValue isKindOfClass:[NSNull class]]) {36             jsonValue = @"";37         }38         39         // Warning:PerformSelector may cause a leak because its selector is unknown(PerformSelector可能導(dǎo)致內(nèi)存泄漏,因為它選擇器是未知的)40         if ([self respondsToSelector:setterSEL]) {41             [self performSelector:setterSEL withObject:jsonValue];42         }43         44     }45 }46 47 // 將字典中的key和model的屬性名映射48 - (NSDictionary *)attributesModel:(NSDictionary *)jsonDictionary49 {50     NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];51     52     // 屬性名和jsonDictionary的key一樣53     for (NSString *jsonKey in jsonDictionary) {54         [dict setValue:jsonKey forKey:jsonKey];55     }56     return dict;57 }58 59 // 獲取屬性的setter方法60 - (SEL)stringToSEL:(NSString *)modelAttributes61 {62     // 截取屬性名的首字母63     NSString *firstString = [modelAttributes substringToIndex:1];64     65     // 首字母大寫66     firstString = [firstString uppercaseString];67     68     // 截取除首字母以外的其它屬性名內(nèi)容69     NSString *endString = [modelAttributes substringFromIndex:1];70     71     // 拼接setter方法名72     NSString *selString = [NSString stringWithFormat:@"set%@%@:",firstString, endString];73     74     // 將字符串轉(zhuǎn)化為方法75     SEL selector = NSSelectorFromString(selString);76     77     return selector;78 }79 80 @end

 

  其中BaseModel.m實現(xiàn)文件的第41行會報一個警告,警告的內(nèi)容上面已經(jīng)給出了.

  到此為止,一個將json文件中的字典轉(zhuǎn)為模型的類已經(jīng)實現(xiàn)了.

  BaseModel的使用大家可以自己測試一下,在這里就不在演示了.

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 铜鼓县| 苗栗县| 黑山县| 唐海县| 凤翔县| 吉安市| 抚宁县| 阿尔山市| 巍山| 鄂托克旗| 资溪县| 启东市| 紫云| 鸡西市| 江华| 清流县| 武陟县| 博兴县| 望城县| 乌拉特前旗| 扶风县| 沧源| 仁布县| 灵台县| 瑞安市| 壤塘县| 巴南区| 柳江县| 宜章县| 横峰县| 永和县| 木里| 宜州市| 乌鲁木齐县| 石河子市| 灌阳县| 宜阳县| 渝北区| 靖宇县| 武川县| 临潭县|