美文网首页
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美观的代码规范

    闲扯淡:对于代码规范的作用,其实并不只是所谓将代码风格统一,并不是为了美观而做这项工作。我觉得主要是两方面,一是美...

  • iOS 代码规范篇

    iOS 代码规范篇 iOS 代码规范篇

  • iOS Coding Style Guide 代码规范

    iOS Coding Style Guide 代码规范 iOS Coding Style Guide 代码规范

  • 乐乎-代码规范概述

    参考: 1、iOS中书写代码规范35条小建议 2、iOS开发总结之代码规范 3、iOS代码编程规范-根据项目经验汇...

  • iOS 代码规范文档

    iOS 代码规范文档 [toc] 修订 概述 制定目的:制定iOS 编码规范,主要是为了规范公司内部的iOS 代码...

  • iOS -如何让你写的代码更规范

    iOS -如何让你写的代码更规范 iOS -如何让你写的代码更规范

  • 代码之天圆地方

    优雅的写代码轻松的查代码严格的审代码 一、 iOS代码规范检查 新人入场第一件事就是熟悉代码规范iOS代码编程规范...

  • iOS 代码规范

    iOS规范:仅适用于iOS的代码规范(使用Objective-C语言)。 一.代码应该简洁易懂,逻辑清晰 不要过分...

  • iOS开发总结之代码规范

    iOS开发总结之代码规范

  • iOS知识整理(二)

    OC知识整理 代码规范 iOS 代码规范 #pragma mark - 添加子视图#pragma mark - 添...

网友评论

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

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