@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
/*swift编码规范:
转载轻注明出处
参考资料:《Github 官方分享的Swift 编码规范》
格式化代码:
1.大括号
统一使用缩进,除非特殊阅读需求,比如bolck中有时候多层嵌套,为了方便阅读,可以适当使用换行的括号

2. 空格 VS tabs
只允许使用空格,将编辑器设置为1个TAB = 4个字符缩进

3. 每行的长度
▪ 每行最多不得超过100个字符,80字符的标准有点少,这导致过于频繁的换行
以15寸Macbook Pro的大小,每行100个字符时能最大化地同时容下编辑器和iPhone模拟器
通过 “Xcode => Preferences => TextEditing => 勾选Show Page Guide / 输入
100 => OK” 来设置提醒

4.方法的声明和定义
函数参数体和返回值类型之间留一个空格,例如
*/
func add1(x: Int, y: Int) -> Int{
    return x+y
}
func add2(x: Int) -> (Int->Int) {
    return {y in return x + y}
}
func add3(x: Int)(y: Int) -> Int{
    return x+y
}

let resultAdd1 = add1(1, 2)
let resultAdd2 = add2(1)(2)
let resultAdd3 = add3(1)(y:2)
/*
这样使得阅读的时候能最大程度的区分入参和回参
参数定义的逗号分隔符后至少留一个空格,参数过长超过100列的时候,酌情使用换行。

5.◦ 方法的调用
 调用方法沿用声明方法的习惯。例外:如果给定源文件已经遵从某种习惯,继续遵从那种习惯。
 所有参数应在同一行中,如果超出屏幕,多出的参数进行换行。

6.◦ 类名
 类名的首字母大写,写使用首字母大写的形式
分割单词
 在面向特定应用的代码中,类名应尽量避免使用前缀,每个类都使用相同的前缀影响可读性。
 在面向多应用的代码中,推荐使用前缀。如:GTMSendMessage

7.方法名
 方法名的首字母小写,且使用首字母大写的形式分割单词。方法的参数使用相同的规则。
 方法名+参数应尽量读起来像一句话

8.变量名
 变量名应使用容易意会的应用全称,且首字母小写,且使用首字母大写的形式分割单词
 在类中使用类成员变量时,除非是在block中或者为了区分参数或者临时变量,才特别标明self.xxx
需要时才写上 self, 当调用self的 properties 或 methods 时,self用默认的隐式引用:
例如:
*/


class Event{}
private class History {
    var events: [Event] = []

    func rewrite() {
        events = []
    }
}
//必要的时候再加上self, 比如在闭包里,或者 参数名冲突了:

extension History {
    convenience init(events: [Event]) {
        self.init()
        self.events = events
    }

    var whenVictorious: () -> () {
        return {
            self.rewrite()
        }
    }
}

/*
原因: 在闭包里用self更加凸显它的语义,并且避免了别处的冗长
9.相对于 classes 先选 structs

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

10.当指定一个类型时,把 冒号和标识符 连在一起
当指定标示符的类型时,冒号要紧跟着标示符,然后空一格再写类型
*/
class SmallBatchSustainableFairtrade: NSObject {  }

let timeToCoffee: NSTimeInterval = 2
enum CoffeeType{}
func makeCoffee(type: CoffeeType) -> NSObject { return NSObject() }

/*
11.能不写类型参数的就别写了
12.变量定义即初始化,使用lazy变量定义延迟的初始化,而不是使用函数。
13.对于只有get特性的变量,为了使代码最简化且可读性强,直接这样:
*/
var readOnly:Int{
    return 0
}
/*
14.让所有可引用对象变量只存在一个强引用,其他地方都使用weak,除非特别需要。
15. if语句中,省略默认的左右括号,可读性更强,修改更方便。多个判断的时候也只用括号包含需要约束的并列条件或递推条件
比如:
if a == 5 {
}else{
}

if (b == 7 && c == 8) || d == 9{
}

16.所有block的定义中,对于self的引用都需要设置弱引用。
例如
x.map{[weak self] $0*2}
*/