文档编号:

应用开发Swift编码规范

(版本v1.0.0

 

 

 


成文信息

主题词:

Swift开发编码规范

作  者:

周少停

文档类别:

开发规范

审  核:

批  准:

文档性质:

初稿

主  送:

存档日期:

抄  送:

发布日期:

2016年4月8号

变更信息

版本

原因

作者

日期

           

 

第一章 概述

1.1 编写目的

开发规范制定的目的是为了保证在系统设计、编码、测试、维护的过程中项目组人员遵循一套统一系统设计标准、应用程序编写标准、页面风格标准,

借以提高软件开发团队的效率、增加代码的统一性、可读性,可维护性,保障项目开发稳定。

本文档的阅读对象为开发人员。

本文档提供了项目开发的各项规范以及指导原则。开发人员在开发过程中必须严格遵守此开发规范。

1.2 定义

基类:应用程序最底层的程序支撑,封装应用程序的基本功能和框架实现。

本文中凡是规范标题下的内容,都是开发过程中必须遵守的约定。

本文中凡是注意事项标题下的内容,都是开发过程中最好遵守的原则,它们多是一些技巧的提示,可提高应用程序的性能,避免不必要的错误。

1.3 参考资料

想要了解更多Swift,请查阅以下链接:

github官方网站:https://github.com/

苹果Swift官方网站:https://developer.apple.com/swift/

Swift学习网站(SwiftV视频课堂):http://www.swiftv.cn/

Swift学习网站(极客学院):http://search.jikexueyuan.com/course/?q=swift

Swift指南:https://github.com/ipader/SwiftGuide

Swift代码规范:https://github.com/Artwalk/swift-style-guide/blob/master/README_CN.md

https://github.com/raywenderlich/swift-style-guide

第二章 代码格式与风格

2.1 基本原则

代码格式与风格的基本原则是:便于开发,易于交流,前后一致,符合本规范求,形成全公司统一风格。

  • 缩进精确,减少程序员犯错的可能
  • 明确意图
  • 减少冗余
  • 少量关于美的讨论

2.2 新建工程

  • Product Name使用英文,第一个首字母大写
  • Organization Name:9elephas
  • Organization Identifer:com.9elephas

2.3 缩进

子功能块当在其父功能块后缩进。

当功能块过多而导致缩进过深时当将子功能块提取出来做为子函数。

  • 用 Tabs,而非 空格
  • 文件结束时留一空行
  • 用足够的空行把代码分割成合理的块
  • 不要在一行结尾留下空白
  • 千万别在空行留下缩进

使用缩进2个空格,而不是制表符,以节省空间,并有助于防止换行。请务必在Xcode中设置此偏好。

如:

2.4 长度

为便于阅读和理解,单个函数的有效代码长度当尽量控制在100行以内(不包括注释行),当一个功能模块过大时往往造成阅读困难,

因此当使用子函数等将相应功能抽取出来,这也有利于提高代码的重用度。

单个类也不宜过大,当出现此类情况时当将相应功能的代码重构到其他类中,通过组合等方式来调用,建议单个类的长度包括注释行不超过1500行。

尽量避免使用大类和长方法。

2.5 行宽

页宽应该设置为80字符。一般不要超过这个宽度, 这会导致在某些机器中无法以一屏来完整显示, 但这一设置也可以灵活调整。

在任何情况下, 超长的语句应该在一个逗号后或一个操作符前折行。一条语句折行后, 应该比原来的语句再缩进一个TAB或4个空格,以便于阅读。

一行代码长度也最好控制在80字符以内,该功能可在Xcode里面设置.

 

2.6 间隔

类、方法及功能块间等应以空行相隔,以增加可读性,但不得有无规则的大片空行。

操作符两端应当各空一个字符以增加可读性。

相应独立的功能模块之间可使用注释行间隔,并标明相应内容.

2.7 括号

Swift中括号不同其他编程语言,这里需要注意.如:

同时,{ }的使用规划应该为:

而不是

2.8 分号

Swift不需要分号来换行,所以在每行代码结束时,最好不要加分号,除非一行之上有两句代码,这时才需要在每句代码结束之后加分号

但是,不推荐一行之上写多句代码.

 

第三章 注释

3.1 基本原则

  • 注释应该增加代码的清晰度。代码注释的目的是要使代码更易于被其他开发人员等理解。
  • 如果你的程序不值得注释,那么它很可能也不值得运行。
  • 避免使用装饰性内容。
  • 保持注释的简洁。
  • 注释信息不仅要包括代码的功能,还应给出原因。
  • 不要为注释而注释。
  • 除变量定义等较短语句的注释可用行尾注释外,其他注释当避免使用行尾注释。

3.2 单行注释

单行注释使用//即可

3.2 多行注释

多行注释使用/**/

如:

3.3 类注释

在每个类开始的时候,Xcode会自动写上有关该类.该工程的信息,这时需要为该类写上注释:该类的功能.注意事项等.如

3.3 方法注释

为每一个方法写上注释,该方法的功能.注意事项等,使用MARK标记.

第四章 字段

4.1 类名.自定义协议名.枚举

类名.自定义协议名.枚举采用大驼峰命名法,类名每个单词的首字母都应该大写.如:

4.2 方法名.

方法名.协议名采用小驼峰命名法.第一个单词的首字母小写,其余单词的首字母大写.

4.3 变量名.常量名.集合名.

变量名.常量名.集合名一律采用小驼峰命名法,如果只有一个单词,则一律小写.

4.4 类型推断

尽可能地使用Swift原生类型.如:

应尽量避免:

4.5计算属性

为了保持简洁,如果一个计算属性是只读的,请忽略掉get语句。只有在需要定义set语句的时候,才提供get语句。

推荐:

不推荐:

4.6函数声明

保证短的函数定义在同一行中,并且包含左大括号:

在一个长的函数定义时,在适当的地方进行换行,同时在下一行中添加一个额外的缩进:

4.7闭包表达式

如果闭包表达式参数在参数列表中的最后一个时,使用尾部闭包表达式。给定闭包参数一个描述性的命名。

推荐做法:

不推荐做法:

当单个闭包表达式上下文清晰时,使用隐式的返回值:

4.8结构体构造器

使用原生的 Swift 结构体构造器,比老式的几何类(CGGeometry)的构造器要好。

推荐:

不推荐:

4.9语法糖

推荐使用类型定义简洁的版本,而不是全称通用语法。

推荐:

不推荐:

4.10控制流

推荐循环使用for-in表达式,而不使用for-condition-increment表达式。

推荐:

不推荐:

第五章 其他

5.1.能用 let 尽量用 let 而不是 var

一个好的技巧是,使用 let 定义任何东西,只有在编译器告诉我们值需要改变的时候才改成 var 定义。

5.2.尽早地 Return 或者 break

当你遇到某些操作需要通过条件判断去执行,应当尽早地退出判断条件,如

而不应该

5.3.避免对 可选类型 强解包

5.4.当指定一个类型时,把 冒号和标识符 连在一起

当指定标示符的类型时,冒号要紧跟着标示符,然后空一格再写类型

5.5.需要时才写上 self

需要时才写上 self,当调用 selfpropertiesmethods 时,self 用默认的隐式引用:

必要的时候再加上self, 比如在闭包里,或者 参数名冲突了:

5.6.首选 structs 而非 classes

除非你需要 class 才能提供的功能(比如 identitydeinitializers),不然就用 struct

要注意到继承通常是用 类 的好理由,因为 多态 可以通过 协议 实现,重用 可以通过 组合 实现。

比如,这个类的分级

可以重构成这个这样:

5.7.操作定义符 两边留空格

当定义操作定义符 时,两边留空格

推荐

a = b ++

不推荐

a=b++

 

 

 

 

 

 

 

Swift编程规范的更多相关文章

  1. 窥探Swift编程之别样的HelloWorld

    从今天就开始陆陆续续的发布一些有关Swift语言的东西,虽然目前在公司项目开发中Objective-C还是iOS开发的主力军,但是在不久的将来Swift将会成为iOS开发中的新生宠儿.所以在在Xcod ...

  2. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

  3. JAVA编程规范(下)

    JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1.     通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2.     ...

  4. JAVA 编程规范(上)

    2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1.      应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...

  5. 使Eclipse符合Java编程规范

    编程规范是很重要的东西,能让团队的代码易于阅读和维护,也便于日后的功能扩展. 工欲善其事必先利其器!作为一个Java程序员,与Eclipse打交道可能是一辈子的事情.将Eclipse设置为符合公司编程 ...

  6. flex+AS3编程规范

    flex+AS3编程规范 Flex+AS3编码规范 http://www.cnblogs.com/jiahuafu/   1.  缩写: 尽量避免使用缩写,使用缩写时尽量和Flex保持一致.但要记住一 ...

  7. Python编程规范(PEP8)

    Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...

  8. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  9. JavaScript编程规范

    最近看NodeJS中,有一部分写JS约定俗成的编程规范(附录B,详情参考附件),感觉在实际工作中能用到, 大致意思分享给大家,详情参考附件: 1.缩进:建议两空格 作为Node.js代码的缩进标记: ...

随机推荐

  1. Css:背景色透明,内容不透明之终极方法!兼容所有浏览器

    转载 http://www.cnblogs.com/jikey/archive/2012/08/31/2665880.html <!DOCTYPE html PUBLIC "-//W3 ...

  2. Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题

    Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题   首先,这里所指的单字符形如:Y,男. 有两种做法: a. <s:if test='news.s ...

  3. MySql与SqlServer的一些常用用法的差别

    MySql与SqlServer的一些常用用法的差别 本文为转载 本文将主要列出MySql与SqlServer不同的地方,且以常用的存储过程的相关内容为主. 1. 标识符限定符 SqlServer [] ...

  4. 【转】用PowerDesigner对现有的数据库反向工程建立E-R图

    转自:http://www.cnblogs.com/oceanshare/archive/2010/02/10/1667071.html 由于早期的一个项目在数据库设计建立时没有输出为E-R图,偶在对 ...

  5. git在公司内部的使用实践(转)

    从2011.10月左右,开始在后台组推行git版本控制,到现在也差不多半年了,也形成了一套基于git flow的副官模式工作流程: 版本定义: 版本号使用x.x.x进行定义,第一个x代表大版本只有在项 ...

  6. Ubuntu 查看/修改文件编码

    使用enca工具可以查看和修改文件编码 1.安装 sudo apt-get install enca 2.使用 查看文件编码 enca –L zh_CN file_name 修改文件编码 enca – ...

  7. 流控panabit的安装及配置

    软件: 在panabit的下载页面上,没有最新的版本.刚开始就是从这个地方下载的,但是有一块网卡怎么也找不到.各种加载网卡驱动,最后失败. 之后,从其论坛中发现了最新的2013.05版本,将ISO刻盘 ...

  8. java 面向对象编程-- 第15章 集合框架

    1.  集合特点:元素类型不同.集合长度可变.空间不固定 2.  java中对一些数据结构和算法进行了封装即集合.集合也是一种对象,用于存储.检索.操作和传输对象. 3.  JCF(Java Coll ...

  9. 【HDU2087】KMP

    KMP算法其实很好理解,就是在匹配串中找最近的相同的串. 下面是HDU的2087: #include<iostream> #include<cstdio> #include&l ...

  10. COJ 1287 求匹配串在模式串中出现的次数

    这里要在后缀自动机的节点中维护一个从到达当前位置出现的字符串总个数 这里新添加进来的节点的状态出现的次数必然为1 另外包含所能达到这个节点所能到达的状态一定是将它作为父亲的点 那么说明将它作为父亲的点 ...