接下來,我們嘗試加入progress bar,讓這個專案更完整一點。
如果要progress bar有作用,我們需要用到URLSession delegation的一些methods。
ps. 這篇原文來自Apple的Fetching data into memory
好,我們開始吧!
我們一樣用Part 1的程式碼,只是稍做修改。在Viewcontroller上面加入UIProgressView並且設定IBOutlet。
然後加入兩個property:
UI部份都設定好後,開始後面邏輯的處理。
在原來的startLoad方法,把URLSession用closure的方式給予初始化設定,並設定delegate給自己。
在這邊我們會用到3個屬於URLSessionDataDelegate的方法:
個人習慣用extension把delegate和原本的class區隔開來,覺得這樣比較簡潔不會都混在一塊。
接下來我們就試著在simulator上build並看看結果!儘量找一些檔案大一點的圖片,比較能看出效果:
如果要progress bar有作用,我們需要用到URLSession delegation的一些methods。
ps. 這篇原文來自Apple的Fetching data into memory
好,我們開始吧!
我們一樣用Part 1的程式碼,只是稍做修改。在Viewcontroller上面加入UIProgressView並且設定IBOutlet。
然後加入兩個property:
    //作為接收data的容器
    var receivedData:Data?
    //檔案大小
    var expectedContentLength = 0
UI部份都設定好後,開始後面邏輯的處理。
在原來的startLoad方法,把URLSession用closure的方式給予初始化設定,並設定delegate給自己。
在這邊我們會用到3個屬於URLSessionDataDelegate的方法:
- url在這個方法裡面我們會驗證status code是否正確來判斷有沒有錯誤產生,並且取得檔案的大小.- Session(_: - data - Task: - did - Receive: - completion - Handler:) 
- url將收到的data丟到receivedData並且更新progress bar進度.- Session(_: - data - Task: - did - Receive:) 
- url將收到的完整data轉換成UIImage並呈現在ImageView- Session(_: - task: - did - Complete - With - Error:) 
個人習慣用extension把delegate和原本的class區隔開來,覺得這樣比較簡潔不會都混在一塊。
接下來我們就試著在simulator上build並看看結果!儘量找一些檔案大一點的圖片,比較能看出效果:


留言
張貼留言