昨天嘗試跟著教學影片做追蹤下載進度的漸進式圓環動畫,發現其實有許多 UI 元件及功能都還很陌生。
於是還(知識)債的時刻到了。
今天將會把主要用到的元件及功能 URLSession, CALayer, path...等, 一一拆解介紹。
當我們需要從網路 server 端下載資料到 APP 裡面時,可以使用 Swift 裡面的 URLSession(如下) 這個 Class 。基本上 URL Loading System 是一組使用標準網路通訊協定與資料端伺服器 (server) 溝通及載入資料的 Class。
URLSession(configuration: URLSessionConfiguration, delegate: URLSessionDelegate?, delegateQueue: OperationQueue?)
這個 URLSession 裡面提供了一個 API 可以幫我們從 server 端摳資料到我們的 APP 裡面。
NSURLSession 被套用在 APP 裡面時, 便會透過 NSURLRequest 對 資料端伺服器 (server) 發出資料請求。
這個 URLSession 在 URL Session Programming Guide 裡頭有更詳盡的介紹。
當我們套用了 URLSession 以後,我們的 APP 便會啟動一個或更多個分別執行的資料轉換 session。
Swift 裡面提供了 URLSession 與 URLConnection 兩個方式可以讓我們傳送 URLRequest (從 server 抓取資料)。
URLRequest(url: URL, cachePolicy: URLRequest.CachePolicy, timeoutInterval: TimeInterval)
以下是一個節錄自網路文章 URLRequest 的範例:
let urlString = URL(string: "https://developer.apple.com/documentation/foundation/nsurlrequest") //要摳資料的url
if let url = urlString {
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
// 可以先忽略以下的程式碼
if error != nil {
print(error)
} else {
if let usableData = data {
print(usableData) //JSONSerialization
}
}
}
//
}
若是之前沒有使用過 URLRequest 的經驗,建議在閱讀時,先不要看 //之間的程式碼。
可以先把 dataTask(with: url) 看成一個 func ,之後的 { (data, response, error) ... } 為一個會回傳 (data, response, error) 這三個值的 closure 。
由於從 server 端拿到的資料會是 JSON 格式,所以 我們還需要用 Swift 本身的 JSONSerialization 來將他轉換成 Foundation 裡面支援的格式。 (PS: JSONSerialization 本身可支援 JSON 物件與 Foundation 物件兩方的互換。)