序言
隨著 WWDC2019 Swift5.0的發(fā)布,基于ABI的穩(wěn)定,Swift 好像要起飛了。之前一直在默默關(guān)注著 Swift,大多數(shù)聲音是 Swift 一年一個樣,現(xiàn)在不是學(xué)的時候,不過另一個很奇怪的現(xiàn)象是大部分公司都開始使用 Swift,所以 Swift 的重要性對于 iOS 的重要性不言而喻。像我這樣抱著 OC 不放的人也大有人在,積極擁抱變化才是王道。
今天看到網(wǎng)上關(guān)于一篇文章 《100 Days of Swift》,國內(nèi)已經(jīng)有很多人寫過類似的文章了,30天學(xué)習(xí)編寫30個Swift小程序,自學(xué) iOS - 三十天三十個 Swift 項目
,正好可以按照這個思路來學(xué)一下 Swift。
可能你會質(zhì)疑有沒有必要重復(fù)寫一個文章呢?我覺得是有必要的,一方面是為了監(jiān)督自己學(xué)下去,另一方面也可以總結(jié)自己的心得和知識點收獲。以后我每天會更新一個例子,學(xué)習(xí)的例子主要參考以上文章,講一講在這個例子里面學(xué)到了哪些 Swift 知識點,希望自己可以堅持下去。
Day1 - Timer Counter

知識點總結(jié):
1.屬性觀察者 willSet didSet
2.var let 關(guān)鍵字的區(qū)別和使用
3.@objc 修飾符使用
4.Swift 中Timer使用
Day2 - Iconfont

知識點總結(jié):
1.訪問限制關(guān)鍵字 private、fileprivate、internal、public、open
private 只能在當(dāng)前文件的當(dāng)前模塊的作用域使用
fileprivate 只能在當(dāng)前文件內(nèi)使用
internal 是默認訪問級別,所有沒有單獨列出的都是這個權(quán)限
public 可以在外部文件訪問,如果只需要訪問就用它
open 可以在外部文件訪問,如果需要繼承和重寫就用它
2.單例的使用,在 class 外面用 static let 修飾即可
3.重寫父類方法,類方法和實例方法的使用
4.強制解包和去解包 ! ?
隱式解包: 就是在定義可選類型值的時候,加上 !進行強制解包
顯示解包: 在使用的時候加 !進行解包
去解包: 用的時候加上 ?可定義 optional 進行解包
5.空合運算符 ??,本質(zhì)上是對三目運算符的一種簡化
6.convenience 和 required 關(guān)鍵字使用
Day3 - Find My Position

知識點總結(jié):
1.使用 CoreLocation 獲取用戶當(dāng)前的地理位置
2.使用 URLRequest URLSession 調(diào)用騰訊地圖open api 獲取具體位置信息
3.JSONSerialization序列化JSON字符串
Day4 - Pull To Refresh

知識點總結(jié):
1.tableView 使用
2.Array的使用
3.UIRefreshControl 的使用
Day5 - Play Local Video

知識點總結(jié):
1.復(fù)習(xí)tablView和tablViewCell在Swift中的用法
2.導(dǎo)入使用AVKit,熟悉AVAsset、AVPlayerItem、AVPlayer、AVPlayerViewController的使用
3.extension為當(dāng)前類創(chuàng)建擴展,可以用來分隔功能,實現(xiàn)相關(guān)協(xié)議
Day6 - Simple PhotoBrowser

知識點總結(jié):
1.自定義一個view,繼承自UIView,添加imageView到scrollView上,監(jiān)聽zommForView方法,實現(xiàn)手勢縮放圖片
2.designated initializers方法,關(guān)鍵點為三點
primary initializers:designated initializers 是一個類的主初始化器,理論上來說是一個類初始化的必經(jīng)之路(注:不同的初始化路徑可能調(diào)用不同的 designated initializers
fully initializes all properties:這點很明確,必須在 designated initializers 中完成所有成員屬性的初始化;
calls an appropriate superclass initializer:需要調(diào)用合適的父類初始化器完成初始化,不能隨意調(diào)用。
3.通過scrollViewDidZoom代理方法設(shè)置縮小時圖片居中
4.添加tapGesture,通過雙擊縮放圖片
Day7 - Color Gradient

知識點總結(jié):
一天的時間是24小時,漸變色分為12段,每天溫度最高是12點,然后溫度逐漸下降,圖層的漸變效果根據(jù)當(dāng)前的溫度來設(shè)定,溫度根據(jù)當(dāng)前的時間來設(shè)定,通過手勢滑動可以設(shè)置當(dāng)前的時間。
1.使用CAGradientLayer實現(xiàn)圖層的漸變效果
2.給UIColor添加extension方便生成顏色
3.通過重寫touchesBegan、touchesMoved方法來監(jiān)聽手勢變化
Day8 - Carousel Effect

知識點總結(jié):
1.照片橫屏滑動的旋轉(zhuǎn)木馬效果,復(fù)習(xí)使用 UICollectionView 來實現(xiàn),cell的標(biāo)題view上添加UIEffectView 實現(xiàn)毛玻璃效果
2.swift 中使用lazy關(guān)鍵字實現(xiàn)延時加載,lazy還可以配合map filter 這類接受閉包運行的方法一起運行
3.cell的layer設(shè)置設(shè)置圓角并且ClipToBounds會觸發(fā)離屏渲染,大量cell的時候要避免這樣使用