@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.shnenglu.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}
*/