最近湊了幾個熱心的小伙伴寫一些swift的新手demo(兩周后應(yīng)該能和大家見面了),我參與了review。于是借demo里的代碼總結(jié)一下新手寫swift要注意的問題,尤其是從oc轉(zhuǎn)到用swift寫的開發(fā)者。
每個語言都有自己的推薦風(fēng)格。顯然oc與swift有著不同的風(fēng)格。當(dāng)我們開始寫swift,首先要注意的就是按照swift的風(fēng)格寫,而不是沿用oc的風(fēng)格。
省略句末的分號
swift推崇簡潔的語法。如果一行里只有一句代碼,句末不要寫分號。
// ??
title = "swift 3";
// ??
title = "swift 3"
省略self.
不在閉包里的時候調(diào)用自身的屬性或者方式時省略self.。這點社區(qū)也產(chǎn)生過討論,有人建議需要強(qiáng)制的聲明self.,但是蘋果大聲的拒絕了。所以讓代碼更簡潔一點吧。
// ??
self.title = "swift 3"
// ??
title = "swift 3"
注意類型標(biāo)注的格式
當(dāng)我們給一個變量或者屬性標(biāo)注類型時的語法是這樣的:
var a: Type
var dict: [String: Any]
注意冒號后面有一個空格,如果是字典key的冒號后面有一個空格。
冒號后面緊跟著類型是不規(guī)范的寫法。
// ??
var name:Sring
var dict: [String:Any]
var dict: [String : Any]
當(dāng)然你可以利用SwiftLint幫你檢查。
注意函數(shù)聲明背后的空格
一個標(biāo)準(zhǔn)的函數(shù)語法是這樣的:
override func viewDidLoad() {
super.viewDidLoad()
}
注意函數(shù)實現(xiàn) { 前有一個空格
// ??
class User{
subscript(index: Int) -> T{
return objects[index]
}
}
// ??
class User {
subscript(index: Int) -> T {
return objects[index]
}
}
二元操作符前后有空格
// ??
var sum = 1+2
// ??
var sum = 1 + 2
// 注意函數(shù)返回類型 -> 符號的前后空格
// ??
func greet(person: String, day: String)->String {
return "Hello \(person), today is \(day)."
}
// ??
func greet(person: String, day: String) -> String {
return "Hello \(person), today is \(day)."
}
閉包、函數(shù)實現(xiàn)不要寫在一行里
// ??
var joke : JokeItem? {
didSet {
if let _ = joke { updateUI() }
}
}
// ??
var joke : JokeItem? {
didSet {
if let _ = joke {
updateUI()
}
}
}
對象初始化不要顯式調(diào)用init
通過()直接就是調(diào)用對象的初始化方法,不需要調(diào)用init
// ??
let url = NSURL.init(string: "github.com")
// ??
let url = NSURL(string: "github.com")
函數(shù)命名
oc的第一個參數(shù)名是省略的,所以會把第一個參數(shù)名帶到方法名上。swift 3以后調(diào)整為在調(diào)用時第一個參數(shù)名會展示。所以函數(shù)命名時不要把第一個參數(shù)相關(guān)命名放在函數(shù)名上。
// ??
func bindWith(data: String) {
}
// ??
func bind(withData: String) {
}
bind(withData: "swift")
然而這里直接把介詞去掉顯得更加簡潔:
// ??
func bind(data: String) {
}
bind(data: "swift")
歡迎關(guān)注我的微博:@沒故事的卓同學(xué)
相關(guān)鏈接:
swift style guide