MJExtension使用指导(转)

MJExtension能做什么?

  1. MJExtension是一套字典和模型之间互相转换的超轻量级框架
  2. 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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值