你的位置:首页 > 操作系统

[操作系统]自学iOS开发小功能之四:懒加载中进行字典转模型(两种方式)


假设有一个flags.plist文件

ZWFlags.h

 1 #import <Foundation/Foundation.h> 2 @interface ZWFlags : NSObject 3 /** 国旗名字 */ 4 @property (strong, nonatomic)NSString *name; 5  6 /** 国旗图片 */ 7 @property (strong, nonatomic)NSString *icon; 8  9 + (instancetype)flagsWithDict:(NSDictionary *)dict;10 11 @end

ZWFlags.m

#import "ZWFlags.h"@interface ZWFlags()@end@implementation ZWFlags+ (instancetype)flagsWithDict:(NSDictionary *)dict{  ZWFlags *flags = [[self alloc] init];  //此处的self不能用ZWFlags  flags.name = dict[@"name"];  flags.icon = dict[@"icon"]; //此处两句也可以直接写成[flags setValuesForKeysWithDictionary:dict];   return flags;}@end

在需要使用的控制器中

第一种方式:

 1 #import "ViewController.h" 2 #import "ZWFlags.h" 3 /** 所有国旗的数据 */ 4 @property (strong, nonatomic)NSMutableArray *flags; 5  6 @end 7  8 @implementation ViewController 9 10 - (NSMutableArray *)flags11 {12   if (_flags == nil) {13     //装flag模型14     _flags =[NSMutableArray array];15 //    加载plist数据16     NSString *path = [[NSBundle mainBundle] pathForResource:@"flags.plist" ofType:nil];17     NSArray *arr = [NSArray arrayWithContentsOfFile:path];18 //    字典转模型19     for (NSDictionary *dict in arr) {20       ZWFlags *flag = [ZWFlags flagsWithDict:dict];21       [_flags addObject:flag];22     }23   }24   return _flags;25 }

第二种方式:

 1 #import "ViewController.h" 2 #import "ZWFlags.h" 3 /** 所有国旗的数据 */ 4 @property (strong, nonatomic)NSArray *flags; 5  6 @end 7 @implementation ViewController 8  9 - (NSArray *)flags10 { 11   if (_flags == nil) {12     //加载plist文件13     NSString *path = [[NSBundle mainBundle] pathForResource:@"flags.plist" ofType:nil];14     NSArray *dictArr = [NSArray arrayWithContentsOfFile:path];15     16     //字典转模型17     NSMutableArray *flagArray = [NSMutableArray array];18     for (NSDictionary *dict in dictArr) {19       ZWFlags *flag = [ZWFlags flagsWithDict:dict];20       [flagArray addObject:flag];21     }22     _flags = flagArray;23   }24   return _flags;25 }