Swift已经问世有一段时间了,各种优秀的第三方库都陆续出现,以及学习网站都加大了对Swift的推广力度,就连一向傲慢的苹果也为推广Swift专门设立了一个Bolg。还有不少大神都发文看好Swift发展。所以为了适应未来,学习Swift迫在眉睫。
最近看了一个swift项目:CollapsableTable-Swift-master,我已经找不到是从哪里下载的了,为了能够永久保存,不至于误删除,我copy了一份放在了我的百度云中,分享给大家:http://pan.baidu.com/s/1nux5IaP
在项目中学习到了一些Swift编写方法和要点。
1, 对于一个只申明了方法的protocol,class最好在extention中实现该协议,实现该协议时需要调用的私有方法最好也放在该extention中,这样会使得代码结构清晰。
如项目中的CollapsableTableScene类在实现CollapsableTableViewSectionHeaderInteractionProtocol协议的时候是这样写的:
extension CollapsableTableViewController: CollapsableTableViewSectionHeaderInteractionProtocol {
//相关实现......
}
private fund indexPaths(...){
//私有方法实现
}
类在实现对应协议的时候,将所有相关函数都放入了对应的extention中。
2,当一个条件不满足就需要return结束函数,最好使用guard[条件取反] else { }
如项目中:CollapsableTableViewController的ViewDidLoad函数的实现:
guard let tableView = collapsableTableView() else {
return
}
//.....非空执行
如果不使用guard,那么就需要隐式解包:如下
let tableView = collapsableTableView()
if tableView == nil{
return;
}
//而之后使用tableView也需要解绑tableView!.
if let tableView = collapsableTableView() {
//.....非空之行
}else{
return;
};
这样的话代码结构就不再清晰,容易误导读者。
3,千万不要为一个声明为!的值,在其后添加?来调用它的实例函数。因为该值如果没有被赋值,在其后添加?调用方法则会忽略方法调用,而不会crash。导致bug难以查找。
注意:声明为!的属性,如果没有在init方法中或者在声明的时候赋初始值,编译器不会报错也不会有警告。
如项目中:MenuSectionHeader类中的interactionDelegate声明为!值,但是又在touchesEnded方法中这样调用:interactionDelegate?.userTappedView(self, atPoint: touch.locationInView(self)). 如果在interactionDelegate忘记被赋值,则userTappedView就会被忽略掉。程序bug就会比较难找。
我认为这是项目中Swift使用的一个缺陷。应当去除?.
本人iOS菜鸟一个,正在不断学习中。
以上仅是个人想法,如有缺陷欢迎指正。
谢谢。
