iOS 编码规范与可读性提高

本文以笔者较为主观角度,梳理了一些iOS开发中代码规范的意见。供各位参考使用。

1.使用XCFormat

XCFormat可以帮我们合理的管理,空行,回车,数学符合的前后空格,去除多余的符号等等。
appstore中有许多Xcode相关的插件,这里推荐XCFormat。
https://apps.apple.com/cn/app/xcformat/id1165321484?l=en&mt=12
可以帮你解决大部分的格式问题,优化代码。

appstore中可以找到


安装完成后,在系统偏好设置中选中


并且可以在【键盘】-》【快捷键】中设置快速校准的功能键


接下来打开Xcode -- Editor,即可看到对应的控件已经安装完成。


2.活用系统默认快捷键

option + command + [ 、option + command + ] 组合使用

“option + command + [ \ ] ”本身的功能是将已扫黑的代码前后移动,以“option + command + [ ”为例,扫黑选中某几行代码后,按下“option + command + [ ”可以将该代码块前移。而 “+ ] ”是后移。 在移动的同时,会自动将扫黑选中的代码自动对齐,我们就是利用这个对齐的效果。
使用一次“option + command + [ ”,再使用一次“option + command + ] ”

option + command + / 的使用

option + command + / 用在方法体前可快速生成格式统一优美的注视,如下:

/// 设置需要显示的语言列表
/// @param array 语言列表
/// @param info XX模型
- (instancetype)initWithArray:(NSArray *)array language:(XXXXInfo *)info;

3.自我修养与习惯

引用
#import "XXXXX.h"
#import 
#import "SonAXXXXX.h"
#import 
#import "SonBXXXXX.h"

许多代码维护久了(尤其是公用模块),出现常常出现厚重的引用。大家基本上是用一个加一个。
这个在C语言include时代会引起很多问题。后面在各种语言中都是用类似与OC中import的宏之后,引用部分渐渐淡出大家视野。
为了提高可读性,建议尽可能将组成控件声明在前部,然后在子控件后注视

#import "XXXXX.h"
#import 
#import 
/// son
#import "SonAXXXXX.h"    ///xx控件
#import "SonBXXXXX.h"    ///xx控件
匿名分类
@interface WKCFTranslationView ()
@property (nonatomic, strong) XXXView *listenInView;
@property (nonatomic, strong) XXXView *speakView;
@property (nonatomic, strong) XXXButton *silenceButton;
@property (nonatomic, weak) XXXWindow *selectLangListWindow;
@property (nonatomic, copy) XXXInfo *currentLanguage;
@property (nonatomic, copy) XXXParam *languageParam;
@property (nonatomic, assign) BOOL isSilence;
@property (nonatomic, assign) BOOL isMenuShowing;
@end

在.m的匿名分类中:
1.每个协议前留空行,优先放置系统协议,再放置自定义协议


2.属性对象字符前后留空格
3.先写nonatomic、atomic、原子属性。在写strong、weak、copy、assign声明属性,最后写readwrite、readonly等读写属性。
4.优先先写自定义控件、再写指针对象、最后写普通变量

方法声明
- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
    // Drawing code here.
}

这一块其实没有特别好说的,XCFormat通常会完成大部分工作。比较在意的是每一个方法体后的 “ { ” 部分。

- (void)drawRect:(NSRect)dirtyRect {

在Xcode自动生成的init方法中

- (instancetype)init
{
    self = [super init];
    if (self) {
        <#statements#>
    }
    return self;
}

通常是 “ { ” 在第二行,而在自动生成的VC中则是 “ { ” 在方法的同行

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

因为看不到.m中的写法,这里就见仁见智了。我个人是更加喜欢同行的方式。

- (void)drawRect:(NSRect)dirtyRect {

总感觉换行的方式特别像js,看起来有点别扭。反正看个人喜好。项目内保持一致即可。
或者也可以,所有构造方法都换行,非构造方法都不换行。

多使用#pragma mark 和 // MARK:

pragma mark 声明的就好像书籍中的导航页标一样。可以在较多的代码中快速寻找。同时类似于另外开辟的一个简易书目。
可以活用各种形式,来提高美感。

/// 添加分割线,在搜索页中更加醒目
#pragma -mark -=-=-=-=- XXXXItem -=-=-=-=-
#pragma mark - ***** Private *****
/// 常用的
#pragma -mark XXXXItem 
#pragma mark XXXXItem 
/// 在搜索页中不添加,但是在.m中会更加醒目
#pragma XXXXItem
// MARK: -=-=- 提高美感 -=-=-
// MARK: - - - - 分割线等等 - - - - -


有兴趣,可以看这篇,挺好:https://www.jianshu.com/p/960d4e184181

期待更多意见,待续。

你可能感兴趣的:(iOS 编码规范与可读性提高)