1、面对一个文件中的方法很多时,我们可以使用MARK分组对方法进行注释,方便查找
//MARK:-VCLifeCycleMethodsoverridefuncviewDidLoad(){super.viewDidLoad()//...//...}//MARK:-CustomMethodsfuncformatString(){//...//...}
注意:团队中如果有人使用Extension去分割代码(不建议),提高可读性!但是应当注意的是,Extension中的方法,子类无法重写!
2、不管是否用来终止语句还是分割语句,都不应该使用分号
建议:functest(){letstrd="dsj"print(strd)}不建议:functest(){letstrd="dsj";print(strd);}
3、当函数没有返回值的时候可以把Void省略
建议:funcmyTest(){}不建议:funcmyTest()-Void{}
4、在定义类和函数的时候,左大括号不需要另起一行且在前面需留有空格。
建议:classMyTest(){}funcmyTest(){}不建议:classMyTest(){}funcmyTest(){}
5、在一个文件中,两个类或者方法之间需要有空格。
正确:classMyTest(){}funcmyTest(){}错误:classMyTest(){}funcmyTest(){}
6、代码中的运算符前后应有空格(单目运算符除外)。
正确:leta=1+1;错误:leta=1+1;
7、逗号后面需要有空格。
正确:letarr=[1,2,3,4,5]错误:letarr=[1,2,3,4,5]
8、类继承、函数参数中的变量与类型之间等带有冒号的情况:冒号前不加空格,冒号后需要加空格。
正确:classAppDelegate:UIResponder,UIApplicationDelegate{}funcmyTest(a:Int){}错误:classAppDelegate:UIResponder,UIApplicationDelegate{}funcmyTest(a:Int){}
9、if语句中的else必须跟在上一个if的右括号后面。
正确:ifsuccess{}else{}错误:ifsuccess{}else{}
10、在switch语句中,case应当与switch语句对齐。(可使用Xcode格式化代码快捷键ctrl+i进行对齐操作)
正确:switchval{case0:print("")case1:print("")default:print("default")}错误:switchval{case0:print("")case1:print("")default:print("default")}
11、实现协议时可将相关协议函数放置在单独extension中,提高代码可读性。
建议:classTestViewController:UIViewController{}extensionTestViewController:UITableViewDataSource{}extensionTestViewController:UITableViewDelegate{}不建议:classTestViewController:UIViewController,UITableViewDataSource,UITableViewDelegate{}
12、闭包声明不需要写参数名,只需声明类型即可。
建议:funcmyTest(success:(String)-Void){}不建议:funcmyTest(success:(_data:String)-Void){}
13、闭包含多参数值,如果其中的参数没有用到,可以用“_”把参数省略
建议:loadData{_,_,name3inprint(name3)}不建议:loadData{name1,name2,name3inprint(name3)}
14、简单闭包表达式写在同一行且省略return。
建议:letsortNames=names.sorted(by:{$0$1})不建议:letsortNames=names.sorted(by:{return$0$1})
15、闭包循环引用:使用weakself修饰的闭包,需要判断self有效性。
requestData(success:{[weakself]inguardletstrongSelf=selfelse{return}strongSelf.updateUI()})
16、尾随闭包只在单参数条件下使用
建议:letsquares=[1,2,3].map{$0*$0}UIView.animate(withDuration:1.0,animations:{},