• 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

  • 相关阅读:
    043 抖音短视频爬取实战
    048 Python里面yield的实现原理
    047 Python面试知识点小结
    001 Glang实现简单分布式缓存
    046 算法的时间复杂度和空间复杂度计算
    042 使用Python远程监视多个服务器和数据库的状态,python,监控,同步
    041基于python实现jenkins自动发布代码平台
    045 chrome浏览器前端调试技巧
    STL学习
    Asio与Boost.Asio
  • 原文地址:https://www.cnblogs.com/zeyang/p/4472656.html
Copyright © 2020-2023  润新知