学习Swift的正确姿势 -- 实践Swift版CSSticky
Swift实践项目RLStickyHeaderFlowLayout
为什么要学Swift?
说Swift很重要,也很有发展什么的,都是老生常谈了。对于我来说,学习Swift也是今年下半年的一项规划,但是真正让我开始投入学习Swift还得说件有意思的事:
前几天,在看博客的时候,偶然看见一个人在github上开源的一个项目,然后就进了这个人的github主页。看了一会,发现 —— 他的项目怎么大部分都是copy别人有名的开源项目呢?原来,虽然是copy别人家的项目,但却是用Swift语言重写的。好嘛,酱紫也可以啊。。。不过,他的项目倒是也挺受欢迎,点星量也是不少的。等等,Swift?有名的开源项目?重写?哈哈。。这是个不错的主意 —— 用Swift重写别人的好的项目
一种莫名的兴奋涌上心头,这岂不是学习Swift的最佳姿势?
于是,便开始了Swift的学习。
搞定基础语法
初识Swift,觉得这语言还是挺棒的,简洁方便。不过,由于英文水平有限,还是不要看Swift的官方文档(github地址)了,还是看些国内大神们翻译的吧:我这里使用的有 Swift学习指引 & CooaChina-Swift
其实,如果英文基础好的人,还是建议看苹果的官方文档。苹果文档不仅写的详细,而且还会有一些示例。比如前两天看人家博客中用Swift写的牛顿摆,原来,是苹果文档中就有的Newton's Cradle
有了这些资源,那么就开始一边学一边尝试写代码了。
这里值得说的是,我并没有先要把Swift完全懂了才开始动手我的cosplay,而是花了差不多半天儿的时间把基础的语法看了一遍,了解Swift语言的基础。对于iOS开发者来说,如果oc基础不错的话我感觉学起来还是挺容易的。如果是跨行学习Swift,只要是对自己所用的语言比较扎实的话,学起来也是蛮轻松的。而我之前自学了一些JavaScript,所以在学Swift的时候也是有很大帮助。总之有一点, 如果你之前的语言基础好的话,学习Swift就会轻松的多了
开始敲代码
Code是开发者学习语言的最佳方式,所以,那就赶紧找个项目show一下吧。由于之前研究`UICollectionView`的原因,我选择了@jamztang大神的开源项目CSStickyHeaderFlowLayout。这是一个用`UICollectionView`来替代`UITableView`的项目,支持`UITableView` plain模式下section header的悬停功能,并且加入了具有视差效果的顶部视图parallax header。如果,自己想要定制collectionview的layout来满足更复杂的需求,源码的修改也是比较容易的 —— 只需要,在`layoutAttributesForElementsInRect`的方法中,保留源码中对于header的处理,并且自己的item attribute的frame按照源码做y值的高度差处理就行了。
选择cosplay的项目,有几个原则是要注意的:一定要选择自己能了解的项目,也就是说对源码的实现原理很清楚,这点很重要。另外,一定要记得标明原作,尊重原作者的权利。
就这样,开始cosplay了。期间,也会遇到一些问题。而这点,正是我们需要的。因为,只有实践中的问题才能让我们更好的成长,更快的掌握知识。而这个时候,要有点耐心,把问题一个个解决掉,那快感,可是不言而喻的。经过了一天多的时间,从学习到cosplay,再到调试bug,终于把CSStickyHeaderFlowLayout的Swift版RLStickyHeaderFlowLayout完成了。真是神清气爽啊。
来个Carthage吧
既然Swift都已经完成了,那还等什么,也让它支持Carthage吧。于是,又开始研究Carthage了。你看,这是多么有意思的事啊!学习Swift,随后又学习了Carthage动态framework包管理,何乐而不为呢?
其实,在学习使用Carthage的时候还是有很多坑的。安装使用倒是很简单,官方下载安装,配置Cartfile文件都是简单的写上你要用的项目就行。不过,为了是自己的项目支持Carthage,以方便别人使用,做Carthage打包操作的时候还是遇到了些麻烦的:
打包Swift为了在framework中使用,提供接口的地方一定要用public标示,否则别人是看不见你的类的(这涉及到了访问控制的问题);而且,Swift的注释也是有要求的,注释不对,framework中可是没有注释的哦(注释问题可以参考Swift注释风格-简书)
总结
经过几天的实践,虽然不能熟练掌握Swift,但是却学到了很多东西,也对Swift有了更深的认识。所以说,实践是检验真理的唯一标准。
那还等什么,想学Swift的小伙伴们,也赶紧动手cosplay起来吧。。。
我的Hexo博客