文档编号:

应用开发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. IE中JavaScript 的异常处理

    错误类型 编程中我们会遇到四种错误:编译错误.逻辑错误.输入/验证错误.运行时错误,但是在JavaScript中我们只能最后两种错误. JavaScript 1.5定义了六种错误类型: EvalErr ...

  2. IO流--字符流

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...

  3. 集成 Union Pay - 银联支付

    作者感言 前面已经把WeChat SDK的支付, AliPay SDK搞得七七八八了, 接下来就是银联支付的Union Pay SDK.最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, ...

  4. sql 语句随机时间存储过程

    CREATE PROC [dbo].[Proc_GetRandomTime](@startTime datetime,@endTime datetime,@date datetime output ) ...

  5. 20145236 《Java程序设计》实验二实验报告

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称: Java面向对象程序设计 实验内容: 初步掌握单元测试和T ...

  6. Quoted-printable 编码介绍、编码解码转换

    求教,“=B9=A4=D7=F7=BC=F2=B1=A8” 这种是什么编码方式? Quoted-printable 可译为“可打印字符引用编码”.“使用可打印字符的编码”,我们收邮件,查看信件原始信息 ...

  7. 读取Cookie及Cookie所有属性操作方法

    读取Cookie及Cookie所有属性操作方法 2013-08-04 22:21:43|  分类: 技术 |  标签:cookie  |举报|字号 订阅   要把Cookie发送到客户端,Servle ...

  8. css+div如何解决文字溢出

    看到标题你一定很轻易就会想到截断文字加“...”的做法.哈哈,就是这样.其实写这篇日志也只是把这样方法做个记录,因为似乎还有很多人不记得碰到这样的情况该如何处理. 首先,先解释一下,一般用div+cs ...

  9. 为 Node.js 开发者准备的 8 本免费在线电子书(转)

    ode.js 是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设你是在POSIX环境下运行它 Linux 或 Mac OS X.如果你 ...

  10. c#网络通信框架networkcomms内核解析之八 数据包的核心处理器

    NetworkComms网络通信框架序言 本文基于networkcomms2.3.1开源版本  gplv3协议 我们先回顾一个 c#网络通信框架networkcomms内核解析之六 处理接收到的二进制 ...