一.自動生成屬性的分類 模型屬性,通常需要跟字典中的key一一對應。從伺服器得到的數據太雜?數據太多?寫成plist文件後一個個對照填寫屬性,太繁瑣?那麼我麽可以嘗試寫一個分類來自動列印出所有屬性。 • 需求:能不能根據一個字典,自動生成對應的屬性。 • 解決:提供一個分類,專門根據字典生成對應的屬 ...
一.自動生成屬性的分類
模型屬性,通常需要跟字典中的key一一對應。從伺服器得到的數據太雜?數據太多?寫成plist文件後一個個對照填寫屬性,太繁瑣?那麼我麽可以嘗試寫一個分類來自動列印出所有屬性。
• 需求:能不能根據一個字典,自動生成對應的屬性。
• 解決:提供一個分類,專門根據字典生成對應的屬性字元串。
1 #import <Foundation/Foundation.h> 2 3 @interface NSDictionary (PropertyCode) 4 5 // 生成屬性代碼 6 - (void)createPropetyCode; 7 @end 8 9 @implementation NSDictionary (PropertyCode) 10 // 私有API:真實存在,但是蘋果沒有暴露出來,不給你用 11 // isKindOfClass:判斷下是否是當前類或者子類 12 // 自動生成屬性代碼 13 - (void)createPropetyCode 14 { 15 NSMutableString *codes = [NSMutableString string]; 16 // 遍歷字典 17 [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull value, BOOL * _Nonnull stop) { 18 NSString *code = nil; 19 20 if ([value isKindOfClass:[NSString class]]) {// 註:NSString *筆者喜歡用strong,若想使用copy可修改字元串 21 code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSString *%@;",key]; 22 } else if ([value isKindOfClass:NSClassFromString(@"__NSCFBoolean")]){ 23 code = [NSString stringWithFormat:@"@property (nonatomic, assign) BOOL %@;",key]; 24 } else if ([value isKindOfClass:[NSNumber class]]) { 25 code = [NSString stringWithFormat:@"@property (nonatomic, assign) NSInteger %@;",key]; 26 } else if ([value isKindOfClass:[NSArray class]]) { 27 code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSArray *%@;",key]; 28 } else if ([value isKindOfClass:[NSDictionary class]]) { 29 code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSDictionary *%@;",key]; 30 } 31 32 // 拼接字元串 33 [codes appendFormat:@"\n%@\n",code]; 34 35 }]; 36 37 NSLog(@"%@",codes); 38 } 39 @end分類NSDictionary+PropertyCode
外界使用:
1 #import "ViewController.h" 2 #import "Status.h" 3 #import "NSDictionary+PropertyCode.h" 4 /* 5 plist: 6 字典 7 字典轉模型 8 */ 9 10 @interface ViewController () 11 12 @end 13 14 @implementation ViewController 15 16 - (void)viewDidLoad { 17 [super viewDidLoad]; 18 19 // 解析Plist 20 // 獲取文件全路徑 21 NSString *fileName = [[NSBundle mainBundle] pathForResource:@"status.plist" ofType:nil]; 22 // 獲取字典 23 NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:fileName]; 24 25 // 設計模型-定義屬性 26 // 自動生成屬性代碼 27 [dict createPropetyCode]; 28 } 29 @endViewController
status.plist