[原创]iOS 简化冗余代码

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

  

时间: 2024-08-01 15:04:45

[原创]iOS 简化冗余代码的相关文章

[转]iOS应用程序生命周期(前后台切换,应用的各种状态)详解

转载地址:http://blog.csdn.net/totogo2010/article/details/8048652 iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验. //开发app,我们要遵循apple公司的一些指导原则,原则如下: 1.应用程序的状态 状态如下: Not running

[原创]jQuery的this和$(this)

网上有很多关于jQuery的this和$(this)的介绍,大多数只是理清了this和$(this)的指向,其实它是有应用场所的,不能一概而论在jQuery调用成员函数时,this就是指向dom对象. $(this)指向jQuery对象是无可厚非的,但this就是指向dom对象,这个是因为jQuery做了特殊的处理. 在创建dom的jQuery对象时,jQuery不仅仅为dom创建一个jQuery对象,而且还将dom存储在所创建对象的数组中. elem = document.getElement

[转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. 1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2

[转]iOS学习之UINavigationController详解与使用(三)ToolBar

转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController 接上篇,我们接着讲Navigation 的Toolbar. 1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy

[原创]国外iOS开发资源

这个网站 http://www.scoop.it/t/pandalit 的iOS开发内容挺丰富的,以前自己都是拿网上的第三方库来达到自己所希望获得的效果,看了看这网站的内容,我觉得我有必要去写些自己想要的code效果了.

[原创]收集比较有意思的iOS开源项目

IOS研究之美女图片采集器实现(源码+解析)详解(四十七) IOS研究之智能聊天机器人实现(源码+解析)详解(四十八)

[转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用

转载地址:http://www.mamicode.com/info-detail-514151.html 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理很重要,所以,需要创建一个没有storyboard的项目 1. 创建一个新的工程 2. 选择仅一个视图的模板 选择 Single View Application , 点击Next 3. 填写项目信息 不需要选择core data,填好信息后,点击next,然后点击create 4. 删除sto

[原创]修正DejalActivityView在iOS8之前系统上存在的Bug

DejalActivityView是国外的第三方库,可自定义文本内容和文本长度的菊花转加载指示器效果.该第三方库与其它hud存在不同,能够遮盖键盘:可以自定义遮盖NavigationBar或不遮盖NavigationBar,能够在status bar显示activity view等效果.该库github地址:https://github.com/Dejal/DejalActivityView DejalActivityView在iOS 8 之前的系统上存在bug,今天使用github上的最新版本

[转载]iOS开发:获取设备信息

开发iOS平台的应用的时候,可以获取iOS设备的设备信息,包括设备的名称,设备的机型,设备的iOS版本等等.设备信息主要来自 UIDevice 类. UIDevice *currentDevice = [UIDevice currentDevice]; NSString *strName = currentDevice.name; //设备名称 NSString *strModel = currentDevice.model; //设备类别 NSString *strLocalizedModel