正在给深圳某家智能家居开发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;
}

  

iOS 简化冗余代码的更多相关文章

  1. iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)

    iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫 ...

  2. iOS项目冗余资源扫描脚本

    iOS项目冗余资源扫描脚本 随着iOS项目的版本不断迭代,app中冗余文件会越来越多,app size也持续增加,是时候需要对app冗余资源进行检测,对app进行瘦身. 使用方法: 1. 运行环境为m ...

  3. Async/Await是这样简化JavaScript代码的

    译者按: 在Async/Await替代Promise的6个理由中,我们比较了两种不同的异步编程方法:Async/Await和Promise,这篇博客将通过示例代码介绍Async/Await是如何简化J ...

  4. lombok 简化java代码注解

    lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索"lombok plug ...

  5. Lombok简化Java代码

    导包:import lombok.Data; Lombok简化Java代码: 在Lombok中,生成构造方法的annotation一共有三个:@NoArgsConstructor, @Required ...

  6. 基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

    在Web开发的时候,我们很多时候,需要引用很多CSS文件.JS文件,随着使用更多的插件或者独立样式文件,可能我们的Web界面代码会越来越臃肿,看起来也很累赘,在MVC里面提供了一个Bundle的对象, ...

  7. 批量去除Teleport Pro整站下载文件冗余代码

    teleport pro tppabs标签批量删除 teleport pro tppabs标签批量删除 使 用Teleport Pro下载的网页代码中包含了很多垃圾代码,比如下载的html网页代码中会 ...

  8. 去掉tppabs冗余代码,怎样批量去掉tppabs代码

    去掉tppabs冗余代码,怎样批量去掉tppabs代码 刚用teleport pro拉了一个整站到本地 所有的超链都被强行加了一句tppabs="   就玩了一把dw的替换功能 查找范围:整 ...

  9. Teleport Ultra/Teleport Pro的冗余代码批量清理方法

    Teleport Pro 是款优秀的网站离线浏览工具(即网站整站下载工具),Teleport Ultra是其增强版,但使用此系列软件下载的离线网页里会包含大量冗余代码(如tppabs),手动去修改工作 ...

随机推荐

  1. _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed

    在Ubuntu18上使用交叉编译工具,报这个错.研究之下发现,工具的绝对路径过长,ubuntu18对其优化,修改路径,导致报错. 使用命令:export LC_ALL=C

  2. 查看DDR的频率【学习笔记】

    SDM439平台如何查看DDR的频率 通过访问如下节点查询:cat /sys/kernel/debug/clk/bimc_clk/measure 681.6MHz and higher frequen ...

  3. Nodejs介绍和环境搭建

    Nodejs是JavaScript的运行环境,它让 Java Script 可以开发后端程序,实现几乎其他后端 Node.js 是一个 Javascript 运行环境(runtime) 可以与 PHP ...

  4. jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理

    问题背景:jenkins服务器发布代码后需要执行删除缓存的操作ssh -p222 eus_pe_devadmin@1.1.1.1 "sudo rm -rf /dev/shm/nginx/hi ...

  5. [LeetCode] 108. Convert Sorted Array to Binary Search Tree 把有序数组转成二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...

  6. [LeetCode] 597. Friend Requests I: Overall Acceptance Rate 朋友请求 I: 全部的接受率

    In social network like Facebook or Twitter, people send friend requests and accept others’ requests ...

  7. javaNIO核心概念

    在java的阻塞IO中使用InputStream和outputStream来进行输入和输出,那么两种流是相互独立使用的,而且每次数据传输都要通过“用户态数据”向“os内核态数据”copy或从“os内核 ...

  8. 【剑指offer】面试题 24. 反转链表

    面试题 24. 反转链表

  9. 【转帖】两年Flink迁移之路:从standalone到on yarn,处理能力提升五倍

    两年Flink迁移之路:从standalone到on yarn,处理能力提升五倍 https://segmentfault.com/a/1190000020209179 flink 1.7k 次阅读 ...

  10. Netty 基本原理

    转载. https://blog.csdn.net/qq_27641935/article/details/86543578 之前在看rocketmq源码时,发现底层用了Netty,顺便学习了一下,网 ...