Swift實踐項目RLStickyHeaderFlowLayout
為什么要學Swift?
說Swift很重要,也很有發(fā)展什么的,都是老生常談了。對于我來說,學習Swift也是今年下半年的一項規(guī)劃,但是真正讓我開始投入學習Swift還得說件有意思的事:
前幾天,在看博客的時候,偶然看見一個人在github上開源的一個項目,然后就進了這個人的github主頁??戳艘粫l(fā)現 —— 他的項目怎么大部分都是copy別人有名的開源項目呢?原來,雖然是copy別人家的項目,但卻是用Swift語言重寫的。好嘛,醬紫也可以啊。。。不過,他的項目倒是也挺受歡迎,點星量也是不少的。等等,Swift?有名的開源項目?重寫?哈哈。。這是個不錯的主意 —— 用Swift重寫別人的好的項目
一種莫名的興奮涌上心頭,這豈不是學習Swift的最佳姿勢?
于是,便開始了Swift的學習。
搞定基礎語法
初識Swift,覺得這語言還是挺棒的,簡潔方便。不過,由于英文水平有限,還是不要看Swift的官方文檔(github地址)了,還是看些國內大神們翻譯的吧:我這里使用的有?Swift學習指引?& CooaChina-Swift
其實,如果英文基礎好的人,還是建議看蘋果的官方文檔。蘋果文檔不僅寫的詳細,而且還會有一些示例。比如前兩天看人家博客中用Swift寫的牛頓擺,原來,是蘋果文檔中就有的Newton's Cradle
有了這些資源,那么就開始一邊學一邊嘗試寫代碼了。
這里值得說的是,我并沒有先要把Swift完全懂了才開始動手我的cosplay,而是花了差不多半天兒的時間把基礎的語法看了一遍,了解Swift語言的基礎。對于iOS開發(fā)者來說,如果oc基礎不錯的話我感覺學起來還是挺容易的。如果是跨行學習Swift,只要是對自己所用的語言比較扎實的話,學起來也是蠻輕松的。而我之前自學了一些JavaScript,所以在學Swift的時候也是有很大幫助??傊幸稽c, 如果你之前的語言基礎好的話,學習Swift就會輕松的多了?
開始敲代碼
Code是開發(fā)者學習語言的最佳方式,所以,那就趕緊找個項目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動態(tài)framework包管理,何樂而不為呢?
其實,在學習使用Carthage的時候還是有很多坑的。安裝使用倒是很簡單,官方下載安裝,配置Cartfile文件都是簡單的寫上你要用的項目就行。不過,為了是自己的項目支持Carthage,以方便別人使用,做Carthage打包操作的時候還是遇到了些麻煩的:
打包Swift為了在framework中使用,提供接口的地方一定要用public標示,否則別人是看不見你的類的(這涉及到了訪問控制的問題);而且,Swift的注釋也是有要求的,注釋不對,framework中可是沒有注釋的哦(注釋問題可以參考Swift注釋風格-簡書)
總結
經過幾天的實踐,雖然不能熟練掌握Swift,但是卻學到了很多東西,也對Swift有了更深的認識。所以說,實踐是檢驗真理的唯一標準。
那還等什么,想學Swift的小伙伴們,也趕緊動手cosplay起來吧。。。?
我的Hexo博客