Objective-C Coding Style

随着移动互联网的发展浪潮,更多的开发者都加入了移动开发中来。Objective-c和swift学的飞起(本章只针对oc进行详解),但是写出来的代码简直花样百出,相信大多数coder看到这些代码时,不禁想问一句:“你TM写的什么鬼,what‘s the fxxk”。

coding style真的很!重!要!不管是企业还是独立开发者都有自己的一套代码规范,良好的代码规范利于别人学习和重构,节省开发时间,提高开发效率,提升“性能”等等等等。Next,我们进入正题。

PS:下面多人的做法,只是不推荐,并不能说明语法有错误,程序并不会crash

1、条件判断语句


情景一:布尔值类型的条件判断

应该这么干:

BOOL isSelected;
if (isSelected) {
    // true, do something
}
else {
    // false, do something
}

有些人会这么干:

BOOL isSelected;
if (isSelected == YES) {
    // true, do something
}
情景二:值比较的条件判断

应该这么干:

    NSInteger count = 100;
    if (count == 100) {
        
    }
情景三:复杂的条件判断

应该尽量把if中复杂的条件拆分出来:

    BOOL isObjC = YES;
    BOOL isSwift = NO;
    BOOL isIOSLanguage = isObjC || isSwift;
    
    if (isIOSLanguage) {
        // do something
    }

2、三目运算

情景一:复杂的三木运算需要拆分

应该这么干:

    NSInteger x = (a > b) ? c : d;
    NSInteger result = (e > f) : x : y;

不要这么搞:

    NSInteger result = (e > f) ? (a > b ? c : d) : y;
情景二:如果第二个参数返回的对象跟条件判断的对象相等时

应该这么干:

    result = objectC ?  : swift;

3、switch...case条件语句

情景一:case分支中有多条语句时需要加{}
switch (condition) {
    case 1:
        // ...
        break;
    case 2: {
        // 多行
        // Multi-line example using braces
        break;
       }
    case 3:
        // ...
        break;
    default: 
        // ...
        break;
}
情景二:在不同case分支中有相同的代码块,应合并
switch (condition) {
    case 1:
    case 2:
        // code executed for values 1 and 2
        break;
    default: 
        // ...
        break;
}
情景三:如果使用枚举类型,default分支不是必须的
switch (menuType) {
    case ZOCEnumNone:
        // ...
        break;
    case ZOCEnumValue1:
        // ...
        break;
    case ZOCEnumValue2:
        // ...
        break;
}

4、枚举类型

使用NS_ENUM宏来声明枚举,它可以进行类型声明和自动完成,如果不自己实现枚举值,第一个值为0,然后依次增加

typedef NS_ENUM(NSUInteger, ZOCMachineState) {
    ZOCMachineStateNone,
    ZOCMachineStateIdle,
    ZOCMachineStateRunning,
    ZOCMachineStatePaused
};

推荐阅读更多精彩内容