以前開發的時候,通常用第三方元件像是Alamofire或是AFNetworking用慣了,一兩行就直接可以Call api做get/post的動作,但其實他們的底層還是用NSURLSession的東西。
最近看了原始的文件,順便筆記一下。
我會先介紹不使用delegation methods下如何簡單使用URLSessionTask下載,然後再修改一下加入delegation methods並使用progress bar,最後使用URLSessionDownloadTask 來完成background 下載。
最近看了原始的文件,順便筆記一下。
- URLSessionDataTask - 下載資料到memory.
- URLSessionDownloadTask - 下載資料到檔案系統,如果要在背景下載則需使用URLSessionDownloadTask
- URLSessionConfiguaration - 在上傳或下載中的相關設定放在這,在使用URLSession前就應該先把URLSessionConfiguration先設定好。
詳細的資料可以參考Apple document - URLSession.
直接寫個簡單的Code會比較有概念,Let's go!
我會先介紹不使用delegation methods下如何簡單使用URLSessionTask下載,然後再修改一下加入delegation methods並使用progress bar,最後使用URLSessionDownloadTask 來完成background 下載。
首先我們先新增一個Single view專案。在專案首頁(也才一個Viewcontroller) 加入一個Imageview 和 一個 button
接著連結IBOutlet到這兩個物件上,並且加入button的action。
我們要做的效果是當按下Load Image按鈕後從網址載入圖片。
可以看到當使用者按下按鈕後,先disable按鈕,然後去觸發startLoad這個方法開始下載圖片。
很簡單吧!
進階部分(optional)
我們可以把URLSession下載的邏輯這部分抽出來,方便之後可以重複使用。
新增一個HTTPNetworking.swift 檔案(File -> New File -> Swift File)
打開HTTPNetworking.swift 將下面的程式碼複製上去
我把completionhandle直接typealias一個新的type(本質上不變),然後公開了一個request方法。
當程式呼叫request這個方法時,會去產生URLSessionTask並且開始下載,如果有錯誤則是用AlertView顯示出來。
好了,回到原來的startLoad,我們要稍微修改一下。
這樣如果之後有需要用到URLSession的時候,我們直接呼叫Networking就可以了,不用重複寫一樣的代碼,也方便維護。
下一章我們加入progress bar的應用。
專案的Source code在此
接著連結IBOutlet到這兩個物件上,並且加入button的action。
我們要做的效果是當按下Load Image按鈕後從網址載入圖片。
可以看到當使用者按下按鈕後,先disable按鈕,然後去觸發startLoad這個方法開始下載圖片。
很簡單吧!
進階部分(optional)
我們可以把URLSession下載的邏輯這部分抽出來,方便之後可以重複使用。
新增一個HTTPNetworking.swift 檔案(File -> New File -> Swift File)
打開HTTPNetworking.swift 將下面的程式碼複製上去
我把completionhandle直接typealias一個新的type(本質上不變),然後公開了一個request方法。
當程式呼叫request這個方法時,會去產生URLSessionTask並且開始下載,如果有錯誤則是用AlertView顯示出來。
好了,回到原來的startLoad,我們要稍微修改一下。
這樣如果之後有需要用到URLSession的時候,我們直接呼叫Networking就可以了,不用重複寫一樣的代碼,也方便維護。
下一章我們加入progress bar的應用。
專案的Source code在此
留言
張貼留言