正在给深圳某家智能家居开发iPad版本,在已经存在的iPhone版上修改,该app的界面采用的是xib。xib相比代码来写界面,快速高效,但是可维护性和可读性太差。言归正传,看到这些代码后,我的心情很复杂。
任何一门编程领域,任何人都可以参与,就拿iOS开发来说,有的人写出的代码是能执行,但不仅仅要求是能执行,当项目的功能不断增加时,不整洁的编写风格会让人看着想吐,就不用谈什么可维护性了,简直是一团糟。
else if (devTypeID==13||devTypeID==14)
{
XRDimmingViewController *dimmingVC;
if (iphone6P)
{
dimmingVC = [[XRDimmingViewController alloc]initWithNibName:@"XRDimmingViewController-6P" bundle:nil];
}
else if (iphone6)
{
dimmingVC = [[XRDimmingViewController alloc]initWithNibName:@"XRDimmingViewController-6" bundle:nil];
}
else
{
dimmingVC = [[XRDimmingViewController alloc]initWithNibName:@"XRDimmingViewController" bundle:nil];
}
dimmingVC.devTypeID = devTypeID;
dimmingVC.devID = devID;
[self.navigationController pushViewController:dimmingVC animated:YES];
return;
}
else if (devTypeID==15)
{
XRColorViewController *colorVC = [[XRColorViewController alloc] init];
colorVC.devTypeID = devTypeID;
colorVC.devID = devID;
[self.navigationController pushViewController:colorVC animated:YES];
return;
}
else if (devTypeID>=31&&devTypeID<=34)
{
XRCurtainViewController *curtainVC;
if(iphone6)
{
curtainVC = [[XRCurtainViewController alloc]initWithNibName:@"XRCurtainViewController-6" bundle:nil];
}
else if (iphone6P)
{
curtainVC = [[XRCurtainViewController alloc]initWithNibName:@"XRCurtainViewController-6P" bundle:nil];
}
else
{
curtainVC = [[XRCurtainViewController alloc]initWithNibName:@"XRCurtainViewController" bundle:nil];
}
curtainVC.deviceType = devTypeID;
curtainVC.curtainDeviceID = devID;
[self.navigationController pushViewController:curtainVC animated:YES];
return;
}
完全可以写一个公用方法判断设备类型来加载对应的xib。
- (NSString *)selectViewControllerXibName:(NSString *)className {
NSString *str;
if (iPhone6p) {
str = [className stringByAppendingString:@"-6p"];
} else if (iPhone6) {
str = [className stringByAppendingString:@"-6"];
} else {
str = className;
}
return str;
}
比如下面的这段代码就可以精简了,让程序的逻辑清晰
// 精简前:
else if (devTypeID==13||devTypeID==14)
{
XRDimmingViewController *dimmingVC;
if (iphone6P)
{
dimmingVC = [[XRDimmingViewController alloc]initWithNibName:@"XRDimmingViewController-6P" bundle:nil];
}
else if (iphone6)
{
dimmingVC = [[XRDimmingViewController alloc]initWithNibName:@"XRDimmingViewController-6" bundle:nil];
}
else
{
dimmingVC = [[XRDimmingViewController alloc]initWithNibName:@"XRDimmingViewController" bundle:nil];
}
dimmingVC.devTypeID = devTypeID;
dimmingVC.devID = devID;
[self.navigationController pushViewController:dimmingVC animated:YES];
return;
}
// 精简后:
else if (devTypeID==13||devTypeID==14)
{
XRDimmingViewController *dimmingVC = [[XRDimmingViewController alloc]initWithNibName:[self selectViewControllerXibName:NSStringFromClass([XRDimmingViewController class])] bundle:nil];
dimmingVC.devTypeID = devTypeID;
dimmingVC.devID = devID;
[self.navigationController pushViewController:dimmingVC animated:YES];
return;
}