Swift iOS :我的這5個月的學習過程
2015年,我也去看了下objc,第一感覺很不好,C語言和objc的擴充套件在一起,特別混亂,當時感覺:
- 都是函式,C的函式和objc的函式建立和使用差別很大,並且混合在一起
- objc函式帶著引數標籤的,函式長的受不了
- 即使是第一步最小的app,也得了解設計模式,它一開始就出場,叫做delegate
所以我認為objc語言比較原始,沒有隨著大流和其他語言一起演進,暴得大名,其實不符。加上UIKit的封裝做的比較差。寫了個小app後,我隨即放棄。
等到swift出來,2016年初,我略看了下,感覺好多了,好歹語言顯得和主流的畢竟接近。而且還有類似指令碼的強大的物件字面量,於是開始真的學習。坎和objc相比,少了語言的障礙,但是:
- UIKit的函式名依然帶標籤,依然比較長,你可以感受下AppDelegate的第一個函式: func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
- 依然需要了解設計模式,首先還是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#一樣好用。
相關文章
- 我在開發第一個Swift App過程中學到的四件事SwiftAPP
- 我的Linux系統開始學習的過程Linux
- 演算法--我的紅黑樹學習過程演算法
- 我是個失敗的產品經理,我走過這5個坑
- 大資料開發過程中的5個學習通用步驟大資料
- memcached的學習過程
- java的學習過程Java
- 【個人成長】在家學習的這兩個月
- iOS 學習使用 Swift CodableiOSSwift
- 可以看一下我學習linux的過程Linux
- 學習儲存過程時寫的個例子儲存過程
- 學習一個簡單的儲存過程儲存過程
- 我的Linux學習歷程:那些我看過的Linux書籍們Linux
- 我這個IT男收集過的“明信片”!
- 學習前端我推薦這5本書前端
- 我是這樣學習前端的前端
- 我的Java轉型大資料的學習過程和經歷Java大資料
- 我的7月19號~12月學習安排
- 效能優化的過程學習優化
- Alamofire3.4.1的學習過程
- 我學習USB設計的歷程
- 學習UI設計6個月的課程效果如何?UI
- 我的求職過程求職
- 學習Java的過程中主要圍繞以下幾個方面來學習 (轉)Java
- 騰訊 iOS 三面-這是我踩過的坑!iOS
- iOS學習之深入理解程式編譯過程iOS編譯
- 我的MYSQL學習心得(10) : 自定義儲存過程和函式MySql儲存過程函式
- [譯]過去一個月最 ? 的 10 個 Swift 開源專案Swift
- Java學習過程Java
- Mysql 5.7儲存過程的學習MySql儲存過程
- 我的大資料學習歷程(1)大資料
- 【DATAGUARD 學習】學習DATAGUARD 過程中遇到的問題
- Swift裡我用這個姿勢寫UserDefaultsSwift
- swift學習筆記《5》- 實用Swift筆記
- 自學兩個月,拿到位元組跳動的Offer 後,我決定分享這份學習集合!
- iOS學習筆記43 Swift(三)類iOS筆記Swift
- 我從過去八個月的AI公司面試中學到了什麼?AI面試
- 分享我的幾個學習故事