iOS,「 技巧分享, 属性生成 」

需求:

  • 根据后台 返回json数据, 生成对应的模型属性。

实现步骤:

  • 解析后台数据, 并转换成字典。
  • 字典添加分类, 添加实现方 ( 不写成分类方法也可以, 可以写成一个公共方法调用,具体看您的心情 😁😁😁😁😁😁 )。
  • 这里笔者使用分类写的。
  • 循环字典判断对应的数据类型,生成对应的属性类型,拼接字符串。
  • 控制台打印输出,复制粘贴到模型类中 ( 😀😀😀😀😀😀😀😀😀 )。

注意:

  • 唯一的缺点就是定义模型数据中属性的名称,是根据后台生成的,如果后台变量名称很坑慎用 ( 😂😂😂😂😂😂 )。

知识点

  • 熟悉 OC ( Objective - C ) 的一些基本知识.
  • 了解一些的字符串 OC 字符传的操作.
  • 了解如何判断系统类型, 和分类 ( Category ) 基本使用.

Code

创建所有属性

1
2
3
4
5
6
7
8
// 创建所有属性
- (NSString *)swpGenerateProperty
核心方法 :
// 拼接属性字符串
- (NSString *)swpStitchingString;
// 验证属性类型
- (NSString *)swpVerificationPropertyType:(id)key value:(id)value;


1
2
3
4
- (NSString *)swpGenerateProperty {
return [self swpStitchingString];
}


拼接所有属

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 拼接所有属
- (NSString *)swpStitchingString {
NSMutableString propertys = [NSMutableString string];
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull value, BOOL _Nonnull stop) {
id dictionaryKey = key;
id dictionaryValen = value;
if ([dictionaryKey isEqual:@”id”]) {
dictionaryKey = [NSString stringWithFormat:@”%@_”, key];
}
NSString *property = [self swpVerificationPropertyType:dictionaryKey value:dictionaryValen];
[propertys appendFormat:@”\n /*! !*/ \n %@ \n”, property];
}];
return propertys.copy;
}


验证属性类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 验证属性类型
- (NSString *)swpVerificationPropertyType:(id)key value:(id)value {
if ([value isKindOfClass:NSClassFromString(@”__NSCFBoolean”)]) {
// BOOL
return [NSString stringWithFormat:@”@property (nonatomic, assign, getter = is%@) BOOL %@;”, [key capitalizedString], key];
} else if ([value isKindOfClass:[NSNumber class]]) {
// NSInteger
return [NSString stringWithFormat:@”@property (nonatomic, assign) NSInteger %@;”, key];
} else if ([value isKindOfClass:[NSString class]]) {
// NSString
return [NSString stringWithFormat:@”@property (nonatomic, copy ) NSString *%@;”, key];
} else if ([value isKindOfClass:[NSDictionary class]]) {
// NSDictionary
return [NSString stringWithFormat:@”@property (nonatomic, copy ) NSDictionary *%@;”, key];
} else if ([value isKindOfClass:[NSArray class]]) {
// NSArray
return [NSString stringWithFormat:@”@property (nonatomic, copy ) NSArray *%@;”, key];
} else {
return @””;
}
}