iOS開發——MJExtension復雜數組用法


最近在看MJExtension的Demo,發現了一個plist文件直接轉數組模型的方法。以前研究過但是淺嘗輒止沒有解決,這幾天有時間,好好看了看,找到了解決辦法,與大家分享。

如果大家的項目中有這種嵌套數組對象的情況的plist文件,如:

Screen Shot 2015-05-02 at 10.20.35 PM 即要轉換成一個對象中存有另一個對象數組的情況。

Screen Shot 2015-05-02 at 10.20.42 PM

當沒有這種復雜嵌套時,我們這樣寫:

   1:  -(NSArray *)groups{
   2:      if (!_groups) {
   3:   
   4:          _groups = [Group objectArrayWithFilename:@"cars_total.plist"];
   5:      }
   6:      return _groups;
   7:  }
但是這樣的話groups中的cars屬性會被賦成一個 “含有NSDictionary的NSArray”變量,而不是“含有Car類的NSArray”

並沒有真正的轉成模型,一開始我的解決方法是重寫setCars方法,

//-(void)setCars:(NSArray *)cars{
////    NSLog(@"%s",__func__);
//    _cars = [NSMutableArray array];
//    _cars = [Car modelArrayWithDictionaries:cars];
//}

modelArrayWithDictionaries是我自己實現的一個Dictionary數組轉對象數組的方法,寫的不優雅就不貼出來了。

 

但是我們實際上是可以這樣寫的:

寫法一:

在Group模型中

   1:  //+(NSDictionary *)objectClassInArray{
   2:  //    return @{@"cars":@"Car"};
   3:  //}

寫法二:

在groups屬性的getter里

   1:  (NSArray *)groups{
   2:      if (!_groups) {
   3:   
   4:          [Group setupObjectClassInArray:^NSDictionary *{
   5:              return  @{@"cars":@"Car"};
   6:          }];
   7:          _groups = [Group objectArrayWithFilename:@"cars_total.plist"];
   8:      }
   9:      return _groups;
  10:  }

 

就可以實現直接轉換成對象啦!

 

 

 

關於MJExtension Demo中的其他發現:

MJExtension的Demo中將 [x setupObjectClassInArray:…]放到了MJExtensionConfig

類的+load方法中,Demo中其他地方沒有任何對該類或該方法的引用。

經過查詢,發現原來load是OC中在載入一個類的時候自動調用的方法,真是一個進行配置的好方法!

 

 

參考來源:

Objective-C 類方法 load 和 initialize 的區別

iOS MJExtension框架之字典數組轉模型數組

CoderMJLee/MJExtension


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM