最近湊了幾個熱心的小夥伴寫一些swift的新手demo(兩週後應該能和大家見面了),我參與了review。於是借demo裡的程式碼總結一下新手寫swift要注意的問題,尤其是從oc轉到用swift寫的開發者。
每個語言都有自己的推薦風格。顯然oc與swift有著不同的風格。當我們開始寫swift,首先要注意的就是按照swift的風格寫,而不是沿用oc的風格。
省略句末的分號
swift推崇簡潔的語法。如果一行裡只有一句程式碼,句末不要寫分號。
1 2 3 4 5 |
// ? title = "swift 3"; // ? title = "swift 3" |
省略self.
不在閉包裡的時候呼叫自身的屬性或者方式時省略self.。這點社群也產生過討論,有人建議需要強制的宣告self.,但是蘋果大聲的拒絕了。所以讓程式碼更簡潔一點吧。
1 2 3 4 5 |
// ? self.title = "swift 3" // ? title = "swift 3" |
注意型別標註的格式
當我們給一個變數或者屬性標註型別時的語法是這樣的:
1 2 |
var a: Type var dict: [String: Any] |
注意冒號後面有一個空格,如果是字典key的冒號後面有一個空格。
冒號後面緊跟著型別是不規範的寫法。
1 2 3 4 |
// ? var name:Sring var dict: [String:Any] var dict: [String : Any] |
當然你可以利用SwiftLint幫你檢查。
注意函式宣告背後的空格
一個標準的函式語法是這樣的:
1 2 3 |
override func viewDidLoad() { super.viewDidLoad() } |
注意函式實現 {
前有一個空格
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// ? class User{ subscript(index: Int) -> T{ return objects[index] } } // ? class User { subscript(index: Int) -> T { return objects[index] } } |
二元操作符前後有空格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// ? var sum = 1+2 // ? var sum = 1 + 2 // 注意函式返回型別 -> 符號的前後空格 // ? 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)." } |
閉包、函式實現不要寫在一行裡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// ? var joke : JokeItem? { didSet { if let _ = joke { updateUI() } } } // ? var joke : JokeItem? { didSet { if let _ = joke { updateUI() } } } |
物件初始化不要顯式呼叫init
通過()
直接就是呼叫物件的初始化方法,不需要呼叫init
1 2 3 4 5 |
// ? let url = NSURL.init(string: "github.com") // ? let url = NSURL(string: "github.com") |
函式命名
oc的第一個引數名是省略的,所以會把第一個引數名帶到方法名上。swift 3以後調整為在呼叫時第一個引數名會展示。所以函式命名時不要把第一個引數相關命名放在函式名上。
1 2 3 4 5 6 7 8 9 10 11 |
// ? func bindWith(data: String) { } // ? func bind(withData: String) { } bind(withData: "swift") |
然而這裡直接把介詞去掉顯得更加簡潔:
1 2 3 4 5 6 |
// ? func bind(data: String) { } bind(data: "swift") |
歡迎關注我的微博:@沒故事的卓同學
相關連結:
swift style guide