#import "BaseModal.h"
@implementation BaseModal
-(instancetype)initWith:(NSDictionary *)dic{
if (self = [super init]) {
[self setValueFrom:dic];
}
return self;
}
//根据方法名 获取方法
-(SEL)getSetter:(NSString *)name{
NSString *str = [name capitalizedString];
NSString *setter = [NSString stringWithFormat:@"set%@:",str];
return NSSelectorFromString(setter);
}
//传进来的字典对象 的key必须与对象属性一一对应
-(void)setValueFrom:(NSDictionary *)dic{
NSArray *arr = dic.allKeys;
//循环遍历key
for (NSString *key in arr) {
SEL setter = [self getSetter:key];
if ([self respondsToSelector:setter]) {
id value = dic[key];
//字典中的对象进行处理 如果不是string类型 转变成string类型
if(![value isKindOfClass:[NSString class]]){
value = [value stringValue];
}
[self performSelector:setter withObject:value];
}
}
}
@end
在.h文件中 对初始化方法进行声明即可
@interface BaseModal : NSObject
-(instancetype)initWith:(NSDictionary *)dic;
@end
试用这个基类时 只要实体类 继承这个类,且用-(instancetype)initWith:(NSDictionary *)dic这个方法来实例化对象即可。