一、目的
为了利于项目维护以及规范开发,促进成员之间代码评审的效率,故提出以下开发规范,如有更好的建议,欢迎提出。
本文档的预期读者包括:iOS开发人员。
二、命名规范
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
*注意:即使纯拼音命名方式也要避免采用。但alibab、taobao、youku、hangzhou等国际通用的名称,可视同英文.
大驼峰规则:每个单词的首字母大写。例:NameTextField。 小驼峰原则:第一个单词首字母小写,其余都大写。例:nameTextField。
2.1 项目命名
项目名都遵循大swiftly驼峰swift系统命名。例如:AoRiseProject
2.2 Bundle Identifier 命名
Bundle Identifier
:采效率高用反域名命名规范,全部采用小写字母,以域名后缀+公司顶级域名+应用名形式命名。
例如:com.公司名称(苹果13 kangqiao ).service.guanjia
2.3 类名
类的命名都遵循大驼峰命名。一般是:前缀 + 功能 + 类型。
例如:KQ + Login + ViewController
。
常用控件类命名类型对照表(下表中前缀为:KQ,如果用到下表中没有列举swift制裁出来,请去掉UI首字母,遵循实际规则即可。)
| 控件名 | 类型 | 示例 | | ---- | ---- | ---- | | UIViewController|ViewController|KQBaseViewController | | UView |View |KQBaseView| | UITableView |TableView |KQOrderTableView| | UITableViewCell |Cell |KQOrderListCell| | UIButton |Button |KQSuccessButton| | UILabel |Label |KQSuccessLabel| | UIImageView |ImgView |KQGoodsImgView| | UITextField |TextField |KQNameTextField| | UITextView |TextView |KQSuggestTextView|
其它类相关对照表
| 功能 | 类型 | 示例| | ---- | ---- | ---- | | 工具类| Tool| KQOrderTool| | 管理类| Manager| KQOrderManager| | 模型类| Model| KQOrderListModel| | 数据库类| DataBase、表名+DBHelper |KQFriendDataBase、KQUserTableDBHelper| | 类目| XXX+(范围,例如Extension, Additions 或者功能,例如Frame,Nib,Block)| KQUIButton+Additions、KQUIButton+Block|
2.4 UIViewController请按照如下分类
// 外部传入参数+@IBOutlet // MARK: - life cycle // MARK: - UI // MARK: - events // MARK: - private methods // MARK: - UITableViewDataSource // MARK: - UITableViewDelegate (代理顺序往下排列) // MARK: - network // MARK: - getters & setters
*注意:所有视图或者对象的创建请尽量使用懒加载,调用的时候全部使用self.testButton这样的方式。
import UIKit class KQTestViewController: UIViewController { /// 用户Id public var userId: String? /// 头像 @IBOutlet weak var headerImageView: UIImageView! // MARK: - life cycle override func viewDidLoad() { super.viewDidLoad() // 创建UI self.buildUI() } // MARK: - UI /// 创建UI func buildUI() { // 添加testButton self.view.addSubview(self.testButton) self.testButton.mas_makeConstraints { (make) in make?.top.mas_equalTo()(0) make?.left.mas_equalTo()(0) make?.right.mas_equalTo()(0) make?.bottom.mas_equalTo()(0) } } // MARK: - events /// test按钮点击 /// - Parameter sender: 按钮 @objc func testButtonClick(_ *sender: UIButton) { // 自我介绍 let _ = self.introduction("jack") } // MARK: - private methods /// 自我介绍 /// - Parameter name: 姓名 /// - Returns: 结果 func introduction(_ name: String?) -> Bool { if (name ?? "").count > 0 { print("my name is (name!)!") return true } else {return false} } // MARK: - UITableViewDataSource // MARK: - UITableViewDelegate // MARK: - network // MARK: - getters & setters private lazy var testButton: UIButton = { let testButton = UIButton(type: .custom) testButton.backgroundColor = .red testButton.setTitle("测试", for: .normal) testButton.addTarget(self, action: #selector(testButtonClick(_ *:)), for: .touchUpInside)* return testButton }() }
2.5 变量和方法
变量苹果手机和方法的命名都遵循小驼峰命名。 例如:
testButton func testButtonClick(_ *sender: UIButton)响应事件。
2.6 常量
全局常量:工程前缀+全大写,下划线隔开 例如:
let KQ_SCREEN_WIDTH
2.7 参数名
参数名以小驼峰命名,尽量参考苹果原生方法风格编写。尽量可读性好,看到方法名就知道这个swift翻译方法是用来效率干什么的。例如:
func setData(_ *imageUrl: String?,* _ name: String?, content: String?)
三、资源文件规效率高范苹果官网
3.1 资源文件命名
全部小写,采用下划线命名法,加前缀区分。所有的资源文件都需要加上工程前缀效率计算公式(小写形式)
命效率名模式:可加后缀 _smal
表示小图, _big
表示大图,逻辑名称可由多个单词加下划效率的拼音线组成,采用以下规则:
- 模块名_用途_*逻辑名称* - 模块名_用途_*颜色* - 用途_*逻辑名称* - 用途_*颜色* |说明|前缀(工程前缀示例KQ)|示例| | ---- | ---- | ---- | |按钮相关|kq_btn_ | 如下: kq_home_btn_normal、kq_home_btn_red、kq_btn_normal、kq_btn_red_big| |背景相关|kq_bg_| 如下: kq_home_bg_header、kq_bg_main|
3.2 文件夹命名
创建文件夹最好创建实体文件夹,找到工程目录,创建相应文件夹并拖入工程。文件夹命名使用相应模块结构分层的英文,首字swift是什么意思啊母要大写。例:Model, View, Controller, Tool, Other, S苹果xervice等等。
四、第三方库规范
用时下较新的技术,对开源库苹果的选取,一般都需要选择比较稳定的版本,作者在维护的项目,要代码规范七大原则考虑作者对issue的解决,以及开发者的知名度等各方面。选取之后,一苹果手机定的封装是必要的。
项目使用cocoapods统一管理开源第三库文件,不需要手动导入和手动添加依赖库。如果第三方不支持coc苹果8oapods,可手动效率高发票查验导入工程。
如第三方库需要修改,统一放在TheThirdLiabrary文件夹中。
五、注释规范
为了代码规范减少他人阅读你代苹果x码的痛苦值,请在关键地方做好注释苹果8plus。
5.1 类注释
// // KQTestViewController.swift // KangYunYouJia // // Created by zhouxiang on 2020/12/1. // Copyright 2020 zhoux@zzkqdc.com. All rights reserved. //
该注释是自动生成的,在Xcode中设置即可。Created by电脑用户名on创建该文swift系统件的时间。Copyright 2020后面的名字和邮箱是自效率意识方面存在的问题己填写和设置的。具体可在Xcode工程,Project Docume效率意识方面存在的问题nt中设置。这样便可在每次新建类的时候自动加上该头注释。
5.2 方法注释
方法注释,方法外部统一用option + command + /,方法内部统一用//注释。
/// 自我介绍 /// - Parameter name: 姓名 /// - Returns: 结果 func introduction(_ name: String?) -> Bool { if (name ?? "").count > 0 { print("my name is (name!)!") return true } else { return false } }
5.3 模型注释
每个model中的,包含的每个苹果发布会属性,都必须要写上相对应的注释,用///注释。阅读者一看这个model,就清楚知道model中的每个苹果12字段代表的意思,用来做什么苹果12事情的。
@interface KQUnitModel : NSObject /// 小区名称 @property (strong, nonatomic, nullable) NSString *communityName; /// 小区code @property (strong, nonatomic, nullable) NSString *communityCode; /// 区域id @property (strong, nonatomic, nullable) NSString *cellId; /// 区域名称 @property (strong, nonatomic, nullable) NSString *cellName; /// 楼层列表 @property (strong, nonatomic, nullable) NSArray <KQFloorModel*> *floorList; @end class KQUnitModel: NSObject { /// 小区名称 var communityName: String? /// 小区code var communityCode: String? /// 区域id var cellId: String? /// 区域名称 var cellName: String? /// 楼层列表 var floorList: [KQFloorModel]? }
*注意:如果不是效率计算公式model的属性,是其它类属性,需要注释,代码规范七大原则请按照model属性注释方式。
六、编码规变量范
-
所有的方法之间空一行。
-
所有的代码块之间空一行,删除多余的注释。
-
所有自定义的方法需要给出注释。
-
尽量使用懒加载(在控制器分类时有提及和要求,其它自定义类按照控制器格式分类,没变量名有的分类不写即可。)
-
代码后的’{‘变量英语不需要独占一行,包括方法之后,if,switch等。
-
必须要统一Swift的要求,属性的定义请按照property之后,空一格,括号之后空一格效率高发票查验,写上类名,空一格之后跟上**效率和属性名。例如:*
/// 小区名 @property (strong, nonatomic, nullable) NSString *communityName;
-
遵循一般代变量泵码规范,多模仿苹果API。
-
删变量与函数除不用的代码。
-
如果有方法一直不会用到,请删swift制裁除(除工具类)。
-
没有执行任何业务逻辑的方法,请删除或给予注释,删除多余的资源或文件,添加必要的注释。
-
比较swifter大的代码块需要给出注释。
七、其它规范Swift
-
建议项目统一使用Masonry和xib结合的方式布局变量之间的关系。不允许出现直接变量英语设置frame的情况。不建议使用纯storyboard开发。
-
提取方法,去除重复代码。对于必要的工具类抽取也很重要,这在以后的项目中是可以重用的。
-
尽可能的使用局部变量
-
尽量减少对变量的重复计算。
-
尽量在合适的场苹果x合使用单例。使用单例可以减轻加载的负担,缩苹果官网短加载的时间,提高加载效率。但并不是所有的地方都适用于单例,简单来说单例主要适用于以下三个方面:
– 控制资源的使用,通过线程同步来控制资源的并发访问。
– 控制效率的拼音实例的产生,以达到节约资源的目的。
– 控制数据的共享,在不建立直接关联的条件苹果x下,让多个不相关的进程或线程之间实现通信。
- 最后不要忘了检测内存泄漏。
评论(0)