協(xié)議)使用一個(gè)解釋器MTLJSONAdapter去轉(zhuǎn)換模型對(duì)象。NSError*error=nil;MyObject*myObject=[MTLJSONAdaptermodelOfClass:MyObject.classfromJSONDictionary:JSONDictiona" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Mantle 簡單教程

系統(tǒng) 1749 0

Mantle可以很方便的去書寫一個(gè)模型層的代碼。

使用它可以很方便的去反序列化JSON或者序列化為JSON(需要在 MTLModel 子類中實(shí)現(xiàn) <MTLJSONSerializing> 協(xié)議)

使用一個(gè)解釋器 MTLJSONAdapter 去轉(zhuǎn)換模型對(duì)象。

    
      
        NSError *error = 
        
          nil; 
          
            MyObject *myObject = [
            
              MTLJSONAdapter 
              
                modelOfClass:
                
                  MyObject.
                  
                    class 
                    
                      fromJSONDictionary:
                      
                        JSONDictionary 
                        
                          error:&error]; 
                          
                            //把
                            
                              JSONDictionary轉(zhuǎn)換為模型對(duì)象 
                              
                                NSDictionary *
                                
                                  JSONDictionary = [
                                  
                                    MTLJSONAdapter 
                                    
                                      JSONDictionaryFromModel
                                      
                                        :myObject]; 
                                        
                                          //將模型對(duì)象轉(zhuǎn)為
                                          
                                            JSON字典 
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          
        
      
    
  

+JSONKeyPathsByPropertyKey

這個(gè)方法返回一個(gè)字典,指定著你的模型對(duì)象和JSON中關(guān)鍵字的映射關(guān)系。

一個(gè)例子:

    
      
        
          @interface 
          
            XYUser : 
            
              MTLModel 
              
                @property (
                
                  readonly, 
                  
                    nonatomic, 
                    
                      copy) 
                      
                        NSString *name; 
                        
                          @property (
                          
                            readonly, 
                            
                              nonatomic, 
                              
                                strong) 
                                
                                  NSDate *createdAt; 
                                  
                                    @property (
                                    
                                      readonly, 
                                      
                                        nonatomic, 
                                        
                                          assign, getter = isMeUser) 
                                          
                                            BOOL meUser; 
                                            
                                              @end 
                                              
                                                
                                                  @implementation 
                                                  
                                                    XYUser + (
                                                    
                                                      NSDictionary *)JSONKeyPathsByPropertyKey { 
                                                      
                                                        return @{ 
                                                        
                                                          @"createdAt": 
                                                          
                                                            @"created_at", 
                                                            
                                                              //這里代表createdAt屬性映射JSON中的created_at關(guān)鍵字 
                                                              
                                                                @"meUser": NSNull
                                                                
                                                                  .null 
                                                                  
                                                                    //meUser不會(huì)從JSON中反序列化 }; } 
                                                                    
                                                                      @end 
                                                                    
                                                                  
                                                                
                                                              
                                                            
                                                          
                                                        
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          
        
      
    
  

當(dāng)我們用字典反序列化的時(shí)候

    
      
        NSDictionary *
        
          JSONDictionary = @{ @
          
            "name"
            
              : @
              
                "john", @
                
                  "created_at"
                  
                    : @
                    
                      "2013/07/02 16:40:00 +0000", @
                      
                        "plan"
                        
                          : @
                          
                            "lite" }; 
                            
                              XYUser *user = [
                              
                                MTLJSONAdapter 
                                
                                  modelOfClass:
                                  
                                    XYUser.
                                    
                                      class 
                                      
                                        fromJSONDictionary:
                                        
                                          JSONDictionary 
                                          
                                            error:&error]; 
                                            
                                              //user中的name為john createdAt為
                                              
                                                2013/
                                                
                                                  07/
                                                  
                                                    02 
                                                    
                                                      16
                                                      
                                                        :
                                                        
                                                          40
                                                          
                                                            :
                                                            
                                                              00 +
                                                              
                                                                0000 meUser為
                                                                
                                                                  0 plan將會(huì)被忽略 
                                                                
                                                              
                                                            
                                                          
                                                        
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          
        
      
    
  

+JSONTransformerForKey:

實(shí)現(xiàn)這個(gè)方法去用一個(gè)不一樣的類型轉(zhuǎn)換器去轉(zhuǎn)化屬性

    
      + (NSValueTransformer *)JSONTransformerForKey:(
      
        NSString *)key { 
        
          if ([key isEqualToString:
          
            @"createdAt"]) { 
            
              return [NSValueTransformer valueTransformerForName:XYDateValueTransformerName]; } 
              
                return 
                
                  nil; } 
                
              
            
          
        
      
    
  

對(duì)于一些值的轉(zhuǎn)換:

    
      + (NSValueTransformer *)createdAtJSONTransformer {
    
      
        return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(
        
          NSString *str) { 
          
            return [
            
              self
              
                .dateFormatter dateFromString:str]; } reverseBlock:^(
                
                  NSDate *date) { 
                  
                    return [
                    
                      self
                      
                        .dateFormatter stringFromDate:date]; }]; } 
                      
                    
                  
                
              
            
          
        
      
    
  

+classForParsingJSONDictionary:

如果定義了一個(gè)類簇,可以實(shí)現(xiàn)這個(gè)方法去轉(zhuǎn)換。

    
      
        
          @interface 
          
            XYMessage : 
            
              MTLModel 
              
                @end 
                
                  
                    @interface 
                    
                      XYTextMessage: 
                      
                        XYMessage 
                        
                          @property (
                          
                            readonly, 
                            
                              nonatomic, 
                              
                                copy) 
                                
                                  NSString *body; 
                                  
                                    @end 
                                    
                                      
                                        @interface 
                                        
                                          XYPictureMessage : 
                                          
                                            XYMessage 
                                            
                                              @property (
                                              
                                                readonly, 
                                                
                                                  nonatomic, 
                                                  
                                                    strong) 
                                                    
                                                      NSURL *imageURL; 
                                                      
                                                        @end 
                                                        
                                                          
                                                            @implementation 
                                                            
                                                              XYMessage + (Class)classForParsingJSONDictionary:(
                                                              
                                                                NSDictionary *)JSONDictionary { 
                                                                
                                                                  if (JSONDictionary[
                                                                  
                                                                    @"image_url"] != 
                                                                    
                                                                      nil) { 
                                                                      
                                                                        return XYPictureMessage
                                                                        
                                                                          .class; } 
                                                                          
                                                                            if (JSONDictionary[
                                                                            
                                                                              @"body"] != 
                                                                              
                                                                                nil) { 
                                                                                
                                                                                  return XYTextMessage
                                                                                  
                                                                                    .class; } NSAssert(
                                                                                    
                                                                                      NO, 
                                                                                      
                                                                                        @"No matching class for the JSON dictionary '%@'.", JSONDictionary); 
                                                                                        
                                                                                          return 
                                                                                          
                                                                                            self; } 
                                                                                            
                                                                                              @end 
                                                                                            
                                                                                          
                                                                                        
                                                                                      
                                                                                    
                                                                                  
                                                                                
                                                                              
                                                                            
                                                                          
                                                                        
                                                                      
                                                                    
                                                                  
                                                                
                                                              
                                                            
                                                          
                                                        
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          
        
      
    
  

使用

    
      
        NSDictionary *textMessage = @{ @
        
          "id"
          
            : 
            
              @1, @
              
                "body"
                
                  : @
                  
                    "Hello World!" }; 
                    
                      NSDictionary *pictureMessage = @{ @
                      
                        "id"
                        
                          : 
                          
                            @2, @
                            
                              "image_url"
                              
                                : @
                                
                                  "http://example.com/lolcat.gif" }; 
                                  
                                    XYTextMessage *messageA = [
                                    
                                      MTLJSONAdapter 
                                      
                                        modelOfClass:
                                        
                                          XYMessage.
                                          
                                            class 
                                            
                                              fromJSONDictionary:textMessage 
                                              
                                                error:
                                                
                                                  NULL]; 
                                                  
                                                    XYPictureMessage *messageB = [
                                                    
                                                      MTLJSONAdapter 
                                                      
                                                        modelOfClass:
                                                        
                                                          XYMessage.
                                                          
                                                            class 
                                                            
                                                              fromJSONDictionary:pictureMessage 
                                                              
                                                                error:
                                                                
                                                                  NULL]; 
                                                                
                                                              
                                                            
                                                          
                                                        
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          
        
      
    
  

數(shù)據(jù)的持久化

MTLModel 已經(jīng)遵循了 <NSCoding> 協(xié)議,所以可以 NSKeyedArchiver 歸檔這個(gè)模型對(duì)象。

Mantle 簡單教程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 乡城县| 柳林县| 尉氏县| 志丹县| 图木舒克市| 东乌珠穆沁旗| 那坡县| 宁阳县| 九龙城区| 应用必备| 晴隆县| 鹤山市| 孝感市| 会同县| 金湖县| 绥芬河市| 合肥市| 洛阳市| 五家渠市| 曲阜市| 舒兰市| 甘洛县| 德惠市| 临澧县| 浮山县| 潮州市| 广安市| 岳普湖县| 鞍山市| 翼城县| 天镇县| 许昌县| 阜新| 武乡县| 湟中县| 和田县| 留坝县| 华容县| 晋城| 广南县| 汝城县|