Swift iOS :我的這5個月的學習過程

1000copy發表於2017-09-01

2015年,我也去看了下objc,第一感覺很不好,C語言和objc的擴充套件在一起,特別混亂,當時感覺:

  1. 都是函式,C的函式和objc的函式建立和使用差別很大,並且混合在一起
  2. objc函式帶著引數標籤的,函式長的受不了
  3. 即使是第一步最小的app,也得了解設計模式,它一開始就出場,叫做delegate

所以我認為objc語言比較原始,沒有隨著大流和其他語言一起演進,暴得大名,其實不符。加上UIKit的封裝做的比較差。寫了個小app後,我隨即放棄。

等到swift出來,2016年初,我略看了下,感覺好多了,好歹語言顯得和主流的畢竟接近。而且還有類似指令碼的強大的物件字面量,於是開始真的學習。坎和objc相比,少了語言的障礙,但是:

  1. UIKit的函式名依然帶標籤,依然比較長,你可以感受下AppDelegate的第一個函式: func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
  2. 依然需要了解設計模式,首先還是delegate,MVC。滿篇的ViewController。

但是我還是學了。寫了一些筆記都在github上。當時找了7-8本書,感覺太囉嗦,充斥者和當前要了解的東西不直接相關的內容,以及大量的和Storyboard相關操作的截圖。這些截圖讓我心煩。我好歹是一個程式設計師啊,寫程式碼看程式碼,跑程式碼,不好嗎。看什麼圖,又不是學PS。 2017年,我決定把這個事兒撿起來,我的做法是上來直接看Apple的開發者文件。當然,難度肯定是有,畢竟這個東西是面向UIKit本身的,講究的是說明白本身,而且一貫的,官方文件的例子都比較少。我看了這個文件中的UIKit,Foundation部分,看了很多遍。看了當天就要筆記,筆記保證都是有一個自己編寫的可以跑得通的案例。這個案例必須一次貼上到IDE內,然後就可以RUN。一個個控制元件的做下來,並且釋出在掘金上。確實看不懂,查了google和SO也沒有結果的,就列印出來,反反覆覆的看。

這時候我覺得腦袋裡面已經都是知識了,要爆了,必須得輸出了。我然後又找了一個App,是開源的swift編寫的v2ex客戶端,Finb/V2ex-Swift。我翻了幾個app,覺得這個程式碼寫的相對簡單,規整,訪問的論壇我也比較熟悉,於是決定從它這裡,再來一遍我的所學,印證下我的知識。這個app除了程式碼比較清潔,結構簡單外,也有用了不少第三方的包。比如上拉下拉控制元件,1password擴充套件,Keychain擴充套件,alamafire網路擴充套件等開發一個App幾乎必備的包,可以一併學習。 地址在此:TofJ 的個人主頁 - 掘金,不知不覺的,居然積累了40篇了。在掘金寫部落格3月,騙了1500的關注呢。我一直秉承幾個原則: 1. 說什麼就集中說什麼,和當前要關心的無關的,不談 2. 程式碼貼入IDE,覆蓋AppDelegate.swift,然後就可以RUN,保證能跑,不需要你在文章裡面七拼八湊的 3. 堅持用程式碼,不用StoryBoard。用了SB,就直接進入截圖黨,操作員,一張圖細節太多,但是看過了,就毫無內容。我不反對使用SB做設計,但是極為反對使用SB來學習UIKit的UI設計

我在閱讀Finb/V2ex-Swift程式碼中,也在按自己的想法做了一些重構: 1. 大意是提煉公共程式碼,把程式碼搬來搬去的放在更加合適的地方,封裝了簡單的基礎類,比如TableView,這個最常用的控制元件的封裝。 2. 當然,我一直反對使用delegate,而是想要轉換它為Property-Method-Event的模式,所以封裝的底層當然還是delegate,高層就儘可能引入Event。 3. 在有些地方為了充分理解,可能需要抽取ViewController程式碼到單獨的工程中來做驗證。這個做法,讓我吃了不少苦頭。就是說你抽了ViewController,隨即它的七大姑八大姨也跟著來,大家都是耦合在一起的。為了以後我做這個工作簡單,我使用訊息機制,把所有的ViewController的全部打破,原來的互相耦合,全部通過一箇中心類,通過訊息傳送和接收處理變成了單純的星型耦合。 我把我的工作放到了這裡。1000copy/fin 。這裡的程式碼基於Finb的貢獻,感謝他的分享。這個程式碼我希望它更好閱讀,也更好拆分,分而治之。

對Swift的學習依然繼續。我希望為它做出一個框架,有了這個框架Swift就像C#一樣好用。

相關文章