美文网首页
iOS美观的代码规范

iOS美观的代码规范

作者: 我是晶锅 | 来源:发表于2017-12-15 13:53 被阅读0次

    闲扯淡:对于代码规范的作用,其实并不只是所谓将代码风格统一,并不是为了美观而做这项工作。我觉得主要是两方面,一是美丽的代码的风格自然会代码的逼格升高,会让我们看起来是一个团结的团队;第二点也是最重要的一点,代码规范有助于形成良好的编码习惯,大家一起查漏补缺有助于代码质量的提升,如果你不想别人说你的代码是一坨屎,那么请注意代码规范。

    代码规范我觉得有这么几个方面:

    一、工程架构;
    二、文件命名;
    三、方法排序;
    四、注释书写方式;
    五、友好的约定。

    一、工程架构:

    架构的思想用不着我这种水平来说,应该是专业的架构师级别的大咖应该说的事情,所以我也不扯什么MVVM,MVP了。对于一般团队的项目,流行了许多年的,也是众多架构的鼻祖,就像C语言一样的MVC足以。
    我建议的架构形式是这样的:


    image.png
    image.png
    image.png

    1、Application中放我们的AppDelegate,UITabBarController;
    2、Business中是我们的所有业务,其中采用MVC的模式,每一个采取业务模块建立一个Controller,View,Model;
    3、Support中是我们的工具类,第三方框架和SDK,category;
    4、Network中是我们自己封装的网络工具类。

    二、文件命名:

    文件命名其实就是一句话,需要加上我们的公司前缀缩写。没什么建议是公司前缀呢,因为公司可能有多个项目,如果你们这个团队会涉及到多个项目,那么采用同一个前缀,可能将工具类共享,也算是公司的共有财产。当然反之,如果你们的项目永远不会有交集,那么可以以项目缩写成为文件前缀。

    三、方法排序:

    我们的方法注释可以用过mark的方式进行注释,这里以一个Controller的方法排序为例子:

    //
    //  JYBaseViewController.m
    //  BAndR
    //
    //  Created by JingGuo on 2017/11/9.
    //  Copyright © 2017年 com.JiangYun.BAndR. All rights reserved.
    //
    
    #import "JYBaseViewController.h"
    
    @interface JYBaseViewController () <UITableViewDelegate,
                                        UITableViewDataSource>
    
    @property (nonatomic, strong) UITableView *tableView;
    
    @end
    
    @implementation JYBaseViewController
    
    #pragma mark - LifeCycle
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self initializeUI];
        [self initializeData];
    }
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    }
    
    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
    }
    
    - (void)viewDidDisappear:(BOOL)animated {
        [super viewDidDisappear:animated];
    }
    
    - (void)dealloc {
        NSLog(@"%s", __func__);
    }
    
    #pragma mark - EventResponse
    
    - (void)buttonAction:(UIButton *)button {
        
    }
    
    #pragma mark - UITableViewDataSource
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return kZero;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        return nil;
    }
    
    #pragma mark - UITableViewDelegate
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return kZero;
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        
    }
    
    #pragma mark - PublicMethods
    
    - (void)thisIsOnePublicMethod:(BOOL)good {
        
    }
    
    #pragma mark - PrivateMethods
    
    - (void)initializeUI {
        
    }
    
    - (void)initializeData {
        
    }
    
    #pragma mark - SetterGetter
    
    - (UITableView *)tableView {
        if (!_tableView) {
            _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
            _tableView.delegate = self;
            _tableView.dataSource = self;
        }
        return _tableView;
    }
    
    
    @end
    
    

    上面是一个Controller的方法排列,生命周期--代理方法--公共方法--私有方法--SetterGetter方法。

    四、注释书写方式:

    1、方法注释:
    方法在 .m 文件中基本可以不用使用特别的注释,如果你的方法名起得足够的闻名晓义。


    image.png

    对于 .m 中实在需要方法进行注释和 .h 中的方法我们最好都要注释,我们可以使用Xcode7之后自带的快捷注释方式:option+command+/

    /**
     公共方法
    
     @param good 是否好
     */
    - (void)thisIsOnePublicMethod:(BOOL)good;
    

    2、属性注释:
    也使用Xcode自带注释方法,我们可以在调用时看到这个属性的注释内容。

    /**
     表单
     */
    @property (nonatomic, strong) UITableView *tableView;
    
    image.png

    3、方法中的注释采用:// 这是注释

        [self.view addSubview:self.tableView];
        
        // UI布局
        [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
            
        }];
    

    五、友好的约定:

    其实对于代码的美观的实现完全要靠我们的代码的约定才能实现,如果你是用铅笔说话,我是用铅笔说话,写在一片文章中,必然不会让人认为这是浑然一体的东西。
    1、常见方法命名:

        // 初始化UI控件
        [self initializeUI];
        // 初始化基础数据
        [self initializeData];
    

    2、尤达表达式:
    不使用 _tableView == nil。首先我们我们将nil放在前面,这样容易避免 == 写成 =
    造成的错误;另外使用 ! 语法,语言识别度会更高。

    - (UITableView *)tableView {
        if (!_tableView) {
            _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
            _tableView.delegate = self;
            _tableView.dataSource = self;
        }
        return _tableView;
    }
    

    3、if……else ……的写法:
    第一种写法肯定不如第二种写法,我们的嵌套千万不要太多,否则不管你的 { } 怎么写都容易将人的眼睛看花的。

    NSInteger test = kZero;
        if (kZero == test) {
            if (kZero == test) {
                if (kZero == test) {
                    DLog(@"this is log");
                } else {
                    
                }
            } else {
                
            }
        }
    
        NSInteger test = kZero;
        // 将可以抽离的判断拿出来
        if (kZero != test) {
            return;
        }
        if (kZero == test) {
            if (kZero == test) {
                DLog(@"this is log");
            } else {
                
            }
        } else {
            
        }
    

    4、枚举的写法:
    我们遵循苹果的统一风格,前缀+名+具体类型

    typedef NS_ENUM(NSUInteger, JYPersonType) {
        JYPersonTypeFather = 0, // 父亲
        JYPersonTypeMother,     // 母亲
        JYPersonTypeSon,        // 儿子
    };
    

    5、静态字符串写法:
    这里举一个cell复用ID的字符串写法。至于其中的关键字的作用可以自己去查。

    static NSString * const JYChoiceRegionCellReuseIdentifier = @"JYChoiceRegionCellReuseIdentifier";
    

    6、字典和数组的写法:

        @{
          @"1" : @"11",
          @"2" : @"22",
          @"3" : @"33"
          };
    
        @[
          @"1",
          @"2",
          @"3"
          ];
    

    7、空格的使用:
    空格是一种语法,对于空格的合理使用会让我们的代码看起来更加清晰美观。
    有空格和无空格会有不一样的感觉:

                if (array.count==0) {
                    if (_page>1&&array.count==0) {
                        _page-=1;
                    }
                }
    
                if (!array.count) {
                    if (_page > 1 && !array.count) {
                        _page -= 1;
                    }
                }
    

    相关文章

      网友评论

          本文标题:iOS美观的代码规范

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