关于代码规范,大同小异。javascript
今天就对代码规范来个简单的概述,意见不一样的,欢迎讨论:css
说明:编码遵循简单,直观,清晰的原则,才能易读、易维护。最重要的是养成常常作注释的良好习惯。java
oc代码:编程
1、 命名swift
1.1 常量:bash
能够写的比较随意,可是最好也用相应意思的英文来写,不然会很难读懂。svn
1.2 变量:函数
遵循驼峰命名法工具
UI控件,咱们就要以“功能”+“类型”来命名,言简意赅,一眼就能看出来他的功能 。 如“待办”的表格用 toDoTableView。 单元测试
若是是约束,以Const尾缀,最好写A的属性 To B的属性命名,若是是宽度,能够很简单,如C的宽度 = CWidthConst
若是是定义成员变量,记得前面加个下划线(这里注意成员变量和类的属性的区别)
1.3 属性
修饰属性的关键字:
block,NSString用copy
基本数据类型用assign
UI控件若是不是懒加载用weak,若是是懒加载用strong
对象(包括CALayer)属性用strong
readOnly(只读不能修改,其实用KVC都是能够赋值的)
1.4 方法名:
遵循驼峰命名法
避免方法的参数过多,通常最多为5个
若是方法有多个返回状态,尝试用enum做为返回类型
方法名不要用缩写,尽可能表达方法操做的意思
1.5 通知:
使用“项目前缀”+“发出通知的类”+“did/will”+“动做”+“Notification”
如:
UIKIT_EXTERN NSString *const UIWindowDidResignKeyNotification; // nil
NSString *const SHUserDidLoginNotification = @"SHUserDidLoginNotification";//自定义的通知
1.6 代理:
“项目前缀”+"类名"+“Delegate”
1.7 类:
以项目的前缀开头
以类的做用+所属于的类型来命名
如:SHToDoCell, SHToDoController等
1.8 关于宏所有用大写,多个单词用下划线分隔或者用小写“k”开头后面遵循驼峰命名法进行定义。
1.9 名字清楚简单,让人一目了然,尽可能用英文命名名字有意义,名字最好尽量精确表达其内容,不能够用拼音代替
1.10 尽可能选择通用词汇
1.11 避免用缩写,若是名字太长才在不引发歧义的前提下用缩写,当命名里出现缩写词时,缩写词所有大写
1.12 避免局部名和外层的名字冲突,避免方法里面的单词和参数名字相同
如 不能够写 -(void)showView:(UIView *)view name:(NSString*)name
能够写-(void)showView:(UIView *)view viewName:(NSString*)name
1.13 文件名:
“项目前缀”+"行为/属性"+"类型"命名,如:SHHomeViewController ZFoundTableViewCell
对于一个汉语有多个英文的名字要统一规定好,如交易就是transaction,说了就不要再用deal了
1.14 关于英语词性的选择(优秀的产品都应如此):
类和对象名应是名词
实现行为的类成员函数名应是动词
2、注释:
2.1 每一个类应该在头文件中写上注释,如:
/*****************************************/
//类的中文名称
//类的做用
//这个类在什么状况下将被调用
/*****************************************/
2.2 每一个类的每一个函数前面应该都应该有注释,如:
/*****************************************/
//函数的中文名称
//函数的详细说明
//重要参数说明
//返回值说明
//测试代码(若是须要则注释上,方便往后单元测试)
/*****************************************/
2.3 每次作了修改,应该按照以下格式做出说明(通常这个用得很少,由于有svn等代码管理工具,能够很轻易的看到哪里改了,还能够很容易的回滚。可是不得不说若是一个工程这么写的话,即便将工程单独拿出来,不依靠svn 也能够很容易的被开发者读懂,可维护性更强)
/*****************************************/
//类型:修改;修改人:某某某;日期:2012.1.1
//修改缘由:XXXXXXX
/**************/
//原代码不要删除,方便改错后恢复
/**************/
/*****************************************/
2.4 方法中重要的逻辑和语句要做注释
2.5 类的变量,宏,常量,枚举等应该有所说明
如:此变量做用是什么
2.6 程序中要注意用#pragma mark 来对程序进行分块以及注释
2.7 添加有必要的注释,尽量使用Xcode注释快捷键(⌘⌥/)
3、方法:
3.1 避免函数的参数过多,通常最多为5个
若是是参数大于等于3个的方法,要去折行
3.2 若是函数有多个返回状态,尝试用enum做为返回类型
3.3 规模不能太大,尽可能控制在200行代码以内,重复使用的代码抽象成函数
3.4 空行的使用:
在操做符先后加空格
文件中的主要部分用空行分开
方法之间要用两个空行分开
用空行将代码按逻辑片段划分
理论上每一行不超过一屏幕
不要在一行中放多于一条语句
3.5 语句switch中的case按字母顺序排列
3.6 不可将布尔变量和逻辑表达式直接与YES、NO或者一、0进行比较。
如: 设bFlag 是布尔类型的变量 能够写
if (bFlag) // 表示flag为真
if (!bFlag) // 表示flag为假
不要写:
if (bFlag == TRUE)
if (bFlag == 1)
if (bFlag == FALSE)
if (bFlag == 0)
3.7 不可将浮点变量用“==”或“!=”与任何数字比较。
说明:不管是float仍是double类型的变量,都有精度限制。因此必定要避免将浮点变量用“==”或“!=”与数字比较,应该转化成“>=”或“<=”形式。
如:能够写
if ((fResult >= -EPSINON) && (fResult <= EPSINON))
不能够写: if (fResult == 0.0)
其中EPSINON是容许的偏差(即精度)
3.8 优先考虑用代码代替xib,代码直观,且实现容易移植。xib和storyboard更耗费内存。可是swift中例外,由于苹果在swift中主推storyboard编程
4、类:
4.1 提升类内的聚合度
4.2 下降类间的耦合度
4.3 限制继承的层数,通常最大为5
4.4 尽可能不要将基类(父类)强制转换成派生类(子类)
4.5 对于功能类似的两个类注意抽取出父类
swift代码:
从oc转swift 会有不少的须要注意的地方,以下
1、命名
参考上面oc的 命名。
2、注释
参考上面oc的 命名。
swift中不用 #pragma mark
而是使用 // MARK: -,按功能、协议、代理等分组
// MARK: - private // MARK: - click // MARK: - loadData
3、函数
在swift中 你们大多都叫函数了,不叫方法了
参考上面oc的 命名。
须要注意的是swift中:
判断语句不用加括号
如:
if typeValue == 1 {
}
在访问枚举类型时,使用更简洁的点语法
let color = UIColor.red
当对外接口不兼容时,使用@available(iOS x.0, *) 标明接口适配的起始系统版本号
@available(iOS 8.0, *) func myFunction() { }
没条语句后面不要加分号
bool类型命名时,使用is做为前缀 var isMine: Bool = false
当函数的第一个参数构成整个语句的介词时(如,at, by, for, in, to, with 等),为第一个参数添加介词参数标签
func login(with username: String?, password: String?){
}
可选类型拆包取值时,使用if let 判断
if let data = result.data {
}
多个可选类型拆包取值时,将多个if let 判断合并
if let name = person.name, let age = person.age {
}
避免使用 as! 或 try! 而是使用if let as?判断
if let name = person.name as? String {
}
组和字典变量定义时须要标明泛型类型,并使用更简洁清晰的语法
var names: [String] = []
var values: [String: Int] = [:]
var person: [String: Any] = [:]
4、类
参考上面oc的 命名。