最近凑了几个热心的小伙伴写一些swift的新手demo(两周后应该能和大家见面了),我参与了review。于是借demo里的代码总结一下新手写swift要注意的问题,尤其是从oc转到用swift写的开发者。
每个语言都有自己的推荐风格。显然oc与swift有着不同的风格。当我们开始写swift,首先要注意的就是按照swift的风格写,而不是沿用oc的风格。
省略句末的分号
swift推崇简洁的语法。如果一行里只有一句代码,句末不要写分号。
// 💔
title = "swift 3";
// 😎
title = "swift 3"
省略self.
不在闭包里的时候调用自身的属性或者方式时省略self.。这点社区也产生过讨论,有人建议需要强制的声明self.,但是苹果大声的拒绝了。所以让代码更简洁一点吧。
// 💔
self.title = "swift 3"
// 😎
title = "swift 3"
注意类型标注的格式
当我们给一个变量或者属性标注类型时的语法是这样的:
var a: Type
var dict: [String: Any]
注意冒号后面有一个空格,如果是字典key的冒号后面有一个空格。
冒号后面紧跟着类型是不规范的写法。
// 💔
var name:Sring
var dict: [String:Any]
var dict: [String : Any]
当然你可以利用SwiftLint帮你检查。
注意函数声明背后的空格
一个标准的函数语法是这样的:
override func viewDidLoad() {
super.viewDidLoad()
}
注意函数实现 {
前有一个空格
// 💔
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
// 注意函数返回类型 -> 符号的前后空格
// 💔
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)."
}
闭包、函数实现不要写在一行里
// 💔
var joke : JokeItem? {
didSet {
if let _ = joke { updateUI() }
}
}
// 😎
var joke : JokeItem? {
didSet {
if let _ = joke {
updateUI()
}
}
}
对象初始化不要显式调用init
通过()
直接就是调用对象的初始化方法,不需要调用init
// 💔
let url = NSURL.init(string: "github.com")
// 😎
let url = NSURL(string: "github.com")
函数命名
oc的第一个参数名是省略的,所以会把第一个参数名带到方法名上。swift 3以后调整为在调用时第一个参数名会展示。所以函数命名时不要把第一个参数相关命名放在函数名上。
// 💔
func bindWith(data: String) {
}
// 😎
func bind(withData: String) {
}
bind(withData: "swift")
然而这里直接把介词去掉显得更加简洁:
// 😎
func bind(data: String) {
}
bind(data: "swift")
欢迎关注我的微博:@没故事的卓同学
相关链接:
swift style guide