美文网首页
iOS(Objective-C)编码规范

iOS(Objective-C)编码规范

作者: 踩了个铺 | 来源:发表于2018-06-27 17:56 被阅读9次

    iOSObjective-C)编码规范

    本文件旨在统一****iOS方向编码规范。增强代码可读性,便于后期维护。

    一、头文件的导入(#import


    写法模板

    #import "当前类头发文件"

    #import <系统库>

    #import <第三方库>

    #import “Controller"

    #import “View"

    #import "Model"

    #import "Others"

    尽量按照先系统类、第三方类后 Controller、View、Model、Others的顺序导入,中间不能有空格。


    建议的写法

    #import "PTWFromeViewController.h"

    #import

    #import "RoadKit.h"

    #import "PTWEditEvalController.h" 

    #import "PTWDetailController.h"

    #import “PTWPeoEditController.h"

    #import "UserSelectView.h"

    #import "FilesEditView.h"

    #import "BillSafetyCell.h"

    #import "PTWPeopleCell.h"

    #import “BillSolutionDialog.h"

    #import "PTWEvaluateModel.h"

    #import "PTWApprovalModel.h"

    #import "PTWDisclosureModel.h"

    #import "BillSignModel.h"

    #import “UserDefaultHepler.h"

    二、@Class的写法

    在.h文件中尽量使用@class,引用头文件


    写法模板

    @class class1, class2;


    建议的写法

    @class UIView, UIImage;

    三、@Interface的写法


    写法模板

    @interface 类名 : 父类 <协议1, 协议2>

    @interface和类名中间一个空格,类名后加空格 “ : ” 之后空格加上父类加空格加协议。


    建议的写法

    @interface AppDelegate : UIResponder <UITableViewDataSourse>


    不建议的写法

    @interface AppDelegate:UIResponder

    四、@property的写法


    写法模板

    @property(关键词, 关键词) 类 *变量名称; // 注释

    关键词用,空格分割 类前后空格


    建议的写法

    @property (nonatomic, copy) NSString  *productID;        //产品标识

    @property (nonatomic, copy) NSString  *status;            //状态


    不建议的写法

    @property (nonatomic,copy) NSString  * productID;        //产品标识

    @property (nonatomic,copy)NSString  * status;            //状态

    *五、类的功能模块建议按以下方式分组


    写法模板

    view的生命周期方法

    初始化方法

    网络请求

    各类代理

    按钮点击

    自定义方法

    set/get方法

    对于网络请求,做到回调方法尽量跟在请求下面。对于多次调用的同一请求,用方法包起来,放到网络请求部分内,偶尔突然使用的请求可以直接放在发起的位置。


    建议的写法

    view的生命周期方法(此mark不用写)

    #pragma mark - setup

    #pragma mark - network

    #pragma mark - xxxx

    #pragma mark - actions

    #pragma mark - accessory

    #pragma mark - setter and getter

    六、enum的定义

    对应的enum写到对应的类中,方便寻找和使用

    使用NS _ ENUM和NS _ OPTIONS进行定义


    建议的写法

    typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {

        UIViewAnimationCurveEaseInOut,        // slow at beginning and end

        UIViewAnimationCurveEaseIn,            // slow at beginning

        UIViewAnimationCurveEaseOut,          // slow at end

        UIViewAnimationCurveLinear,

    };

    typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {

        UIViewAutoresizingNone                = 0,

        UIViewAutoresizingFlexibleLeftMargin  = 1 << 0,

        UIViewAutoresizingFlexibleWidth        = 1 << 1,

        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,

        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,

        UIViewAutoresizingFlexibleHeight      = 1 << 4,

        UIViewAutoresizingFlexibleBottomMargin = 1 << 5

    };

    不建议的写法

    typedef enum {

        GBAppRunDeveloperModeDebug,

        GBAppRunDeveloperModePreRelease,

        GBAppRunDeveloperModeRelease

    }GBAppRunDeveloperMode;

    七、格式和换行


    建议的写法

    if (user.isHappy) {

      //Do something

    } else {

      //Do something else

    }


    不建议的写法

    if (user.isHappy)

    {

        //Do something

    }

    else {

        //Do something else

    }

    八、写直观的代码

    写代码有一条重要的原则:如果有更加直接,更加清晰的写法,就选择它(即使它有时候看起来更长,更笨,也一样选择它)


    建议的写法

    - (void)checkUserAuthentication { 

        if (![YJRuntime sharedInstance].currentUser.tpStatus) {

            // TODO:去实名认证

            return;

        }

        if (![YJRuntime sharedInstance].currentUser.payPwdStatus) {

            // TODO:去设置支付密码

            return;

        }

        if (![YJRuntime sharedInstance].currentUser.bankcardStatus) {

            // TODO:去绑定银行卡

            return;

        }

        // TODO: ...

    }


    不建议的写法

        if ([YJRuntime sharedInstance].currentUser.tpStatus) {

            if ([YJRuntime sharedInstance].currentUser.payPwdStatus) {

                if ([YJRuntime sharedInstance].currentUser.bankcardStatus) {

                // TODO: ...

                } else {

                    // TODO:去绑定银行卡

                } 

            } else {

                // TODO:去设置支付密码

            } 

        } else {

            // TODO:去实名认证

        } 

    九、其它

    1. 方法命名的规范

    如果不是写初始化方法不要用init进行开头

    如果不是属性的set方法不要用set作为方法的前缀

    按钮方法使用按钮名+Click的方式或+DoubleClick


    建议的写法

    - (void)saveButtonClick:(UIButton *)button {}

    2. 控件命名的规范

    一定不要单单用首字母简写命名控件(特殊意义的除外,如WTO、RMB等),并且名字后一定要加上控件类型,例如: UILabel结尾加上Label,UIImageView结尾记上ImageView。


    建议的写法

    @property(nonatomic, strong) UILabel *userNameLabel;

    不建议的写法

    @property(nonatomic, strong) UILabel *userName;

    3. 局部变量

    局部的变量在要初始化时,尽量设置默认值(对于一些对象判断是否赋值可以不进行初始化。使用驼峰命名法,命名变量。

    4. block的命名

    尽量和苹果的命名一致使用completion,也可用Block命名作为参数名结尾。


    建议的写法

    typedef void(DidUpdateViewWithCompletionHandle)()


    不建议的写法

    typedef void(DidUpdateViewWithCallBack)()

    5. 对于一些状态的判断,使用枚举表示不同的状态

    尽量少用根据数字来直接判断不同的状态


    建议的写法

    typedef NS_ENUM(NSUInteger, HomeViewState) {

        HomeViewStateNoData,

        HomeViewStateFailure,

        HomeViewStateItemList,

        HomeViewStateBannerList

    };

    switch(state) {

        case HomeViewStateNoData : {

            //显示没数据

            break;

        } 

        case HomeViewStateFailure : {

            //显示请求错误

            break;

        } 

        case HomeViewStateItemList : {

            //显示商品的列表

            break;

        } 

        case HomeViewStateBannerList : {

            //显示banner列表

            break;

        }

        default :

        break;

    不建议的写法

    if(state == 0) {

      //显示没数据

    } else if(state == 1) {

      //显示请求错误

    } else if(state == 2) {

      //显示商品的列表

    } else if(state == 3) {

      //显示banner列表

    } else {

    }

    此规范为制定阶段可随时更改,欢迎提出合理建议。

    相关文章

      网友评论

          本文标题:iOS(Objective-C)编码规范

          本文链接:https://www.haomeiwen.com/subject/moriyftx.html