- 使用4个空格进行缩进。(可在Xcode的Preferences中进行设置)
- 左大括号写在首行。eg:
class TestClass {
/* ... */
}
- 二元运算符前后添加空格。eg:
let testValue = 1 + 2
- 添加有必要的注释(使用Xcode注释快捷键)。eg:
// 测试按钮
var testBtn:UIButton
/// <#Description#>
///
/// - Parameter testValue: <#testValue description#>
/// - Returns: <#return value description#>
func testFunction(testValue: Int) -> Int {
/*...*/
}
-
图片命名要清晰。eg:
与功能相对应命名图片
- 变量命名应该能推断出该变量类型,或以变量类型结尾。eg:
let coverImageView: UIImageView
let firstName: String
-
接口命名与后台所提供的保持一直,由请求路径、接口名和请求后缀组成。 eg:
GetVipColors接口.jpg
-
接口的请求建议一次封装多处使用,尤其是像获取用户信息这种。eg:
对GetVipColors接口的封装.jpg
- 类型多时使用枚举,枚举名字和功能对应 eg:
/// 房间类型
///
/// - common: 普通模式
/// - handPattern: 相亲
/// - pkPattern: 团战
enum RoomShowType:String {
case common = "common"
case handPattern = "hand_pattern"
case pkPattern = "pk_pattern"
}
- 可选型使用guard或者if let解包后使用。eg:
// guard 解包
guard let giftView = giftViewArr[toMicId] else {return}
// if let 解包
if let giftView = giftViewArr[toMicId] {
}
// if let 解包多个
if let subview = subview, let volume = volume {
}
- block的执行如果存在延迟,需要用weak来规避强引用。 eg:
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
if let weakself = self{
weakself.rainLayer.birthRate = 0
}
}
- 使用// MARK: - XXX进行分组。eg:
/// MARK: - System
// MARK: - Public
// MARK: - Action
// MARK: - Private
// MARK: - xxxDelegate
- 控制代码段大小(比如有一个100行的代码块,其中50行代码是实现了某个动画,则把这50行代码封装为另一个代码块)
- 较大功能或逻辑的修改,最好标记一下。eg:
// modified by FangLin 2018-01-01
- 在取可变数组中的元素时,要考虑数组越界的情况。
- 修改后的代码要进行编译验证。
网友评论