MJExtension使用指导(转)

来源:互联网 发布:gui config.json下载 编辑:程序博客网 时间:2024/05/19 13:19

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
原创粉丝点击