一. ⻚面布局规范
1.1 ⻚面布局顺序
⻚面布局按规定顺序定义, 如果没有省略,但其他内容保持该顺序统一实现
1. #import (先标准库头文件,再非标准库头文件)
2.文件内部定义的宏
3.常量定义
4.变量(静态变量/静态常量)定义
5.属性定义
6.方法实现
1.1.2 标准库定义规范
系统标准库用尖括号<>, 非标准库用双引号"", .h文件中建议多用@class示例:
#import//标准库引用#import"WDUserModel"//非标准库引用
1.2 方法实现布局顺序
遵循重要信息写前面原则
代码以
#pragma mark -模块名区分
主体可如下区分模块,但总体顺序如下
#pragma mark - Initialize
#pragma mark - Life Circle
#pragma mark - Bind
#pragma mark - Action Method
#pragma mark - Delegate(or Datasource) Method
#pragma mark - Setup UI
#pragma mark - Lazy Loading
二. 命名规范
2.1 宏定义命名规范
宏命名以大写单词和下横线_组成
所有单词全部大写,
单词直接以下横线_分割正确示例:
#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
//屏幕宽度
错误示例:
#define screenWidth [[UIScreen mainScreen] bounds].size.width //错误:字母非全大写,单词不以_分割
2.2 静态变量、静态常量命名规范
静态变量、静态常量、全局变量 命名以k + 名组成, 声明的名称遵循驼峰命名法
正确示例:
static const NSString*kMyCellReuseID = @"kMyCellReuseID";错误示例:
static const NSString*myCellReuseID = @"myCellReuseID";//错误:不以字母k开头
static const NSString*MyCellReuseID = @"MyCellReuseID";//错误:不遵循驼峰命名法
2.3 成员变量命名规范
成员变量命名以 “下横线_”开头, 遵循驼峰命名法正确示例:
@interfaceWDHomeViewController()
{
NSString*_title;
}
@end
错误示例:
@interfaceWDHomeViewController()
{
}
@end
NSString*title;
NSString*Type;
//错误:不以下横线_开头//错误:不遵循驼峰命名法
2.4 属性命名规范属性命名规范需遵循驼峰命名法
控件以对应控件结尾, 如定义UIView控件, 则以view结尾, 定义UILabel,则
以label结尾
正确示例:
@property(nonatomic,strong) WDHomeViewModel *viewModel;
@property(nonatomic,strong)UILabel*titleLabel;
错误示例:
@property(nonatomic,strong) WDHomeViewModel *ViewModel;//错
误:不遵循驼峰命名法
@property(nonatomic,strong) WDHomeViewModel *VIEW_MODEL;//错
误:错用宏定义规范
@property(nonatomic,strong) WDHomeViewModel *kViewModel;//错
误:错用静态常量(变量)规范
@property(nonatomic,strong)UILabel*title;//错误,未以统一的标识符结尾
@property(nonatomic,strong)UILabel*titleL;//错误,未以统一
的标识符结尾
2.5 方法命名规范
方法命名需遵循驼峰命名法取名简单, 让人望文生义严禁使用拼音命名
示例:
insertObject:atIndex:好的命名
insert:at:不清晰;插入什么?“at”表示什么?
removeObjectAtIndex:好的命名
remove:不清晰:要移除什么?
2.6 文件统一命名规范
自定义view视图, 以View结尾;
自定义Cell视图, 以
Cell结尾;
自定义ViewController, 以ViewController结尾;
自定义Model, 以Model结尾;
自定义ViewModel, 以
ViewModel结尾.
...
三. 编码格式规范3.1 指针类型编码规范:
所有指针类型的变量或者常量 指针标识*靠近变量或常量名正确
@property(nonatomic,strong,readonly, nullable)NSIndexPath*previouslyFocusedIndexPath;
错误
@property(nonatomic,strong)UILabel* titleLabel;//错误: *星
号靠UILabel
3.2 方法编码格式规范:
方法编码参考苹果命名规范, 方法名后紧跟’:’,然后紧跟形参, 返回类
型’(‘与’-‘之间有一个空格
-[空格](返回值类型)方法名:(参数类型1)参数1[空格]名2:(参数类型2[空格]*)参数2;
正确
- (NSInteger)collectionView:(UICollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section;
错误
- (void)deployLoginInActionWithUserModel:
(WDUserModel*)userModel;//错误:未遵循指针编码规范, *)直接没有空格-(void)deployLoginInActionWithUserModel:(WDUserModel*)userModel;//错误:未遵循指针编码规范, -(直接没有空格
- (void)deployLoginInActionWithUserModel: (WDUserModel
*)userModel;//错误:冒号:和 左括号(直接有空格
- (void)deployLoginInActionWithUserModel:(WDUserModel *)
userModel;//错误:变量名和右括号)有空格
四. 换行规范4.1 方法名换行
*当方法有多个参数导致方法名过⻓时,使用换行使排版整⻬,冒号需对其示例:
- (id)initWithFrame:(NSRect)frameRect
mode:(ind)aMode
cellClass:(Class)factoryId
numberOfRows:(int)rowsHigh
numberOfColumns:(int)colsWide;
4.2 if-else 和 switch-case推荐if-else中 else if 换行, 方便注释调试
推荐
if(index ==0) {
// code
}
else if{
// codel
}
else{
// code
}
switch(cellType) {
caseWDCellTypeName1: {
// code
break;
}
caseWDCellTypeName1: {// code
break;
}
default;
break
}
五. 空行规范:
以下加重部分必须遵守
文件说明与头文件包涵(#import)空1行。
@interface与@class之间空一行
头文件{}里面,如果需要分类区别,各类别之间空1行;
方法完成后,空1行@end
如果需要声明protocal,空2行接着写。通常protocal写在@end后面,但是声明在
@interface前面,也可以另写一个文件。
@synthesize与方法之间空2行。
@implementation和@synthesize之间空一行,@synthesize不要使用逗号
(,)如果需要分类区别,各类别之间空1行
各方法之间空1或2行:
若空1行,则#pragma mark - 与上一个方法}空2行;
若空2行, 则#pragma mark - 与上一个方法}空3行
六. 空格规范:
1.一元操作符如“!”、“~”、“++”、“‒”、“*”、“&”(地址运算符)等前后不
加空格。“[]”、“.”、“->”这类操作符前后不加空格
!bValue
~iValue
++iCount
*strSource
&fSum
aiNumber[i] = 5;
tBox.dWidth
tBox->dWidth
2.多元运算符和它们的操作数之间需要一个空格
fValue= fOldValue;iNumber+= 2;
3.关键字之后要留空格
if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。
4..h中成员声明时,类型与变量之间有至少1各空格。星号(*)靠近变量,不靠近类
型。(部分习惯,所有变量可以以*对⻬,中间留空)
NSString *titleName;intviewIndex;
5.方法名与形参不能留空格,返回类型与方法标识符有一个空格。
方法名后紧跟’:’,然后紧跟形参, 返回类型’(‘与’-‘之间有一个空格。
- (NSInteger)collectionView:(UICollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section;
6.@property后有1各空格,()里面,逗号后有1个空格,括号外,先留1个空格,再声明
属性
@property(strong,nonatomic)UIWindow*window;
七. 注释规范:
7.1 注释类型:文档注释, 三横线 或者 三星号
///注释内容
/**
注释内容
*/
普通注释, 双斜线 或者 双星号
//注释内容
/*
注释内容
*/
7.2 注释规范:
.h中 @interface 必须写文档注释, 标明该类作用
///用户数据全局上下文
@interfaceWDHomeViewController:UIViewController@end
或
/**
用户数据全局上下文
*/
@interfaceWDHomeViewController:UIViewController
@end
.h中所有属性和方法必须写注释