MJExtension能做什么?
- MJExtension是一套字典和模型之间互相转换的超轻量级框架
-
MJExtension能完成的功能
<code class="javascript" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"> 字典(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span>) --> 模型(Model) 模型(Model) --> 字典(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span>) 字典数组(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>) --> 模型数组(Model <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>) 模型数组(Model <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>) --> 字典数组(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>)</code>
详尽用法主要参考 main.m中的各个函数 以及 NSObject+MJKeyValue.h
MJExtension和JSONModel、Mantle等框架的区别
1. 转换速率:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">最近一次测试表明:MJExtension > JSONModel > Mantle</code>
各位开发者也可以自行测试
2.具体用法:
JSONModel
:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">要求所有模型类必须继承自JSONModel基类</code>
Mantle
:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">要求所有模型类必须继承自MTModel基类</code>
MJExtension
:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">不需要你的模型类继承任何特殊基类,毫无污染,毫无侵入性</code>
如何使用MJExtension
方法一:cocoapods导入
:pod 'MJExtension'
方法二:手动导入
:
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">将MJExtensionExample/MJExtensionExample/MJExtension文件夹中的所有源代码拽入项目中 导入主头文件:<span class="hljs-preprocessor" style="color: rgb(203, 75, 22);">#import <span class="hljs-title" style="color: rgb(38, 139, 210);">"MJExtension.h"</span></span> MJExtension<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJConst<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJConst<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span> MJFoundation<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJFoundation<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span> MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span> MJType<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJType<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJCoding<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJCoding<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJKeyValue<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJKeyValue<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span></code>
1.最简单的字典转模型
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">typedef</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">enum</span> { SexMale, SexFemale} Sex; <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">User</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(133, 153, 0);">int</span> age; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(133, 153, 0);">double</span> height; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSNumber</span> *money; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) Sex sex; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"age"</span> : @<span class="hljs-number" style="color: rgb(42, 161, 152);">20</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"height"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"1.55"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"money"</span> : @<span class="hljs-number" style="color: rgb(42, 161, 152);">100.9</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"sex"</span> : @(SexFemale) }; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为User模型</span> User *user = [User objectWithKeyValues:dict]; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"name=%@, icon=%@, age=%d, height=%@, money=%@, sex=%d"</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.age</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.height</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.money</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.sex</span>); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// name=Jack, icon=lufy.png, age=20, height=1.550000, money=100.9, sex=1</span></code>
核心代码1:
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[User objectWithKeyValues:dict]</code>
2.模型中嵌套模型
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Status</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 微博文本内容 */</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text; <span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 微博作者 */</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) User *user; <span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 转发的微博 */</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) Status *retweetedStatus; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"是啊,今天天气确实不错!"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span> }, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"retweetedStatus"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"今天天气真不错!"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span> } } }; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为Status模型</span> Status *status = [Status objectWithKeyValues:dict]; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"text=%@, name=%@, icon=%@"</span>, text, name, icon); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// text=是啊,今天天气确实不错!, name=Jack, icon=lufy.png</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text2 = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.retweetedStatus</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name2 = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.retweetedStatus</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon2 = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.retweetedStatus</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"text2=%@, name2=%@, icon2=%@"</span>, text2, name2, icon2); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// text2=今天天气真不错!, name2=Rose, icon2=nami.png</span></code>
核心代码2
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[Status objectWithKeyValues:dict]</code>
3.模型中有个数组属性,数组里面又要装着其它模型
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Ad</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *image; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *url; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">StatusResult</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 存放着一堆的微博数据(里面都是Status模型) */</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSMutableArray</span> *statuses; <span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 存放着一堆的广告数据(里面都是Ad模型) */</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *ads; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSNumber</span> *totalNumber; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@implementation</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">StatusResult</span></span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 实现这个方法的目的:告诉MJExtension框架statuses和ads数组里面装的是什么模型</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">/* + (NSDictionary *)objectClassInArray{ return @{ @"statuses" : [Status class], @"ads" : [Ad class] }; } + (Class)objectClassInArray:(NSString *)propertyName{ if ([propertyName isEqualToString:@"statuses"]) { return [Status class]; } else if ([propertyName isEqualToString:@"ads"]) { return [Ad class]; } return nil;} */</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 这个方法对比上面的2个方法更加没有侵入性和污染,因为不需要导入Status和Ad的头文件</span> + (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)objectClassInArray{ <span class="hljs-keyword" style="color: rgb(133, 153, 0);">return</span> @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"statuses"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Status"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ads"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Ad"</span> }; } <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"statuses"</span> : @[ @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"今天天气真不错!"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span> } }, @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"明天去旅游了"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span> } } ], <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ads"</span> :@[ @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"image"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ad01.png"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"url"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"http://www.ad01.com"</span> }, @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"image"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ad02.png"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"url"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"http://www.ad02.com"</span> } ], <span class="hljs-string" style="color: rgb(42, 161, 152);">@"totalNumber"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"2014"</span> }; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为StatusResult模型</span> StatusResult *result = [StatusResult objectWithKeyValues:dict]; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"totalNumber=%@"</span>, result<span class="hljs-variable" style="color: rgb(181, 137, 0);">.totalNumber</span>); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// totalNumber=2014</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印statuses数组中的模型属性</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">for</span> (Status *status <span class="hljs-keyword" style="color: rgb(133, 153, 0);">in</span> result<span class="hljs-variable" style="color: rgb(181, 137, 0);">.statuses</span>) { <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"text=%@, name=%@, icon=%@"</span>, text, name, icon);} <span class="hljs-comment" style="color: rgb(147, 161, 161);">// text=今天天气真不错!, name=Rose, icon=nami.png</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// text=明天去旅游了, name=Jack, icon=lufy.png</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印ads数组中的模型属性</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">for</span> (Ad *ad <span class="hljs-keyword" style="color: rgb(133, 153, 0);">in</span> result<span class="hljs-variable" style="color: rgb(181, 137, 0);">.ads</span>) { <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"image=%@, url=%@"</span>, ad<span class="hljs-variable" style="color: rgb(181, 137, 0);">.image</span>, ad<span class="hljs-variable" style="color: rgb(181, 137, 0);">.url</span>);} <span class="hljs-comment" style="color: rgb(147, 161, 161);">// image=ad01.png, url=http://www.ad01.com</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// image=ad02.png, url=http://www.ad02.com</span></code>
核心代码3:
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">在模型内部实现+ (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)objectClassInArray方法</code>
[StatusResult objectWithKeyValues:dict]
4.模型中的属性名和字典中的key不相同(或者需要多级映射)
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Bag</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(133, 153, 0);">double</span> price;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Student</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *ID; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *desc; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *nowName; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *oldName; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *nameChangedTime; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) Bag *bag; <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@implementation</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Student</span></span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 实现这个方法的目的:告诉MJExtension框架模型中的属性名对应着字典的哪个key</span> + (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)replacedKeyFromPropertyName{ <span class="hljs-keyword" style="color: rgb(133, 153, 0);">return</span> @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ID"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"id"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"desc"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"desciption"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"oldName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name.oldName"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nowName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name.newName"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nameChangedTime"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name.info.nameChangedTime"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"bag"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"other.bag"</span> }; } <span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"id"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"20"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"desciption"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"孩子"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"newName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"oldName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"kitty"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"info"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nameChangedTime"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"2013-08"</span> } }, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"other"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"bag"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"小书包"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"price"</span> : @<span class="hljs-number" style="color: rgb(42, 161, 152);">100.7</span> } } }; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为Student模型</span> Student *stu = [Student objectWithKeyValues:dict]; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印Student模型的属性</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"ID=%@, desc=%@, oldName=%@, nowName=%@, nameChangedTime=%@"</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.ID</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.desc</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.oldName</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nowName</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nameChangedTime</span>); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// ID=20, desc=孩子, oldName=kitty, nowName=lufy, nameChangedTime=2013-08</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"bagName=%@, bagPrice=%f"</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.bag</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.bag</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.price</span>); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// bagName=小书包, bagPrice=100.700000</span></code>
核心代码4:
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">在模型内部实现+ (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)replacedKeyFromPropertyName方法</code>
[Student objectWithKeyValues:dict]
5.将一个字典数组转成模型数组
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *dictArray = @[ @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>, }, @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span>, } ]; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典数组转为User模型数组</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *userArray = [User objectArrayWithKeyValuesArray:dictArray]; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印userArray数组中的User模型属性</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">for</span> (User *user <span class="hljs-keyword" style="color: rgb(133, 153, 0);">in</span> userArray) { <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"name=%@, icon=%@"</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>);} <span class="hljs-comment" style="color: rgb(147, 161, 161);">// name=Jack, icon=lufy.png</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// name=Rose, icon=nami.png</span></code>
核心代码5:
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[User objectArrayWithKeyValuesArray:dictArray]</code>
6.将一个模型转成字典
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 新建模型</span> User *user = [[User alloc] init]; user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>; user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>; Status *status = [[Status alloc] init]; status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span> = user; status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"今天的心情不错!"</span>; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将模型转为字典</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *statusDict = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.keyValues</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"%@"</span>, statusDict); <span class="hljs-comment" style="color: rgb(147, 161, 161);">/*{ text = "今天的心情不错!"; user = { icon = "lufy.png"; name = Jack; }; }*/</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 多级映射的模型</span> Student *stu = [[Student alloc] init]; stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.ID</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"123"</span>; stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.oldName</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"rose"</span>; stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nowName</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"jack"</span>; stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.desc</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"handsome"</span>; stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nameChangedTime</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"2018-09-08"</span>; Bag *bag = [[Bag alloc] init]; bag<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"小书包"</span>; bag<span class="hljs-variable" style="color: rgb(181, 137, 0);">.price</span> = <span class="hljs-number" style="color: rgb(42, 161, 152);">205</span>; stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.bag</span> = bag; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *stuDict = stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.keyValues</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"%@"</span>, stuDict); <span class="hljs-comment" style="color: rgb(147, 161, 161);">/* { desciption = handsome; id = 123; name = { info ={ nameChangedTime = "2018-09-08"; }; newName = jack; oldName = rose; }; other = { bag ={ name = "小书包"; price = 205; }; }; } */</span></code>
核心代码6:
<code class="css" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-tag" style="color: rgb(133, 153, 0);">status</span><span class="hljs-class" style="color: rgb(155, 112, 63);">.keyValues</span>、<span class="hljs-tag" style="color: rgb(133, 153, 0);">stu</span><span class="hljs-class" style="color: rgb(155, 112, 63);">.keyValues</span></code>
7.将一个模型数组转成字典数组
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 新建模型数组</span> User *user1 = [[User alloc] init]; user1<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>; user1<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>; User *user2 = [[User alloc] init]; user2<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>; user2<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *userArray = @[user1, user2]; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将模型数组转为字典数组</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *dictArray = [User keyValuesArrayWithObjectArray:userArray]; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"%@"</span>, dictArray); <span class="hljs-comment" style="color: rgb(147, 161, 161);">/*( { icon = "lufy.png"; name = Jack; }, { icon = "nami.png"; name = Rose; } )*/</span></code>
核心代码7:
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[User keyValuesArrayWithObjectArray:userArray]</code>