IOS 用组件化映射的关系表维护列表(后台下发不同的字段,创建不同的类的优化)
程序员文章站
2022-05-13 21:06:45
...
问题:根据后台下发不同的字段,来创建和跳转不同的类(比如支付宝动态菜单的跳转)
**方案:**这里考虑register的形式,维护一份列表
原来笨拙的处理方式,不容易维护,后期要增加控制类getSTVcForKey:(NSString *)aKey 这个方法还要动
+ (BaseViewController *)getSTVcForKey:(NSString *)aKey
{
if ([aKey isEqualToString:@"和后台规定好的字段"]) {
OneViewController *vc = [[OneViewControlle alloc] init];
// return vc;
} else if ([aKey isEqualToString:@"和后台规定好的字段"]) {
TwoViewController *vc = [[TwoViewControlle alloc] init];
// return vc;
}
等等。。还有很多这样的类
return vc;
}
优化:这里考虑register的形式,维护一份映射的列表
key:和后台约定好的字段
Value:控制器
代码:
维护一张映射关系表,后续需要增加或者改动在这增加
#import "OneViewController.h"
#pragma mark - key
NSString * const kOne = @"和后台约定的字段";
static NSDictionary *getTrade(void)
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:1];
//注意一定用,类转化为字符串的方式,这样减少出错率
[dict setValue:NSStringFromClass([OneViewController class]) forKey:kCMBCSafeTool_SET];
等等
return dict;
}
const struct ModuleIdUtil ModuleIdUtil = {
.getTrade = getTrade
};
更改后的:
+ (BaseViewController *)getSTVcForKey:(NSString *)aKey
{
// 这里考虑register的形式,维护一份安全工具列表
NSString *modID = aKey;
NSString *className = 通过key 查找到相对应的Value;
//找到字符串,在转化为类名
Class safeToolVCClass = NSClassFromString(className);
CMBCSafeToolBaseViewController *vc = [[safeToolVCClass alloc] init];
[vc setCurSafeToolType:aKey];
这里如果在创建一个类的时候需要穿字符串给不同的类,父类添加一个方法,子类去重写父类的方法,其实这里还有改进,不要用继承,用protocol会更好
上一篇: Photoshop 一盏华贵的玻璃壁灯
下一篇: Photoshop 一款逼真的小型MP3