接下來,我們嘗試加入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並呈現在ImageViewSession(_: task: did Complete With Error:)
個人習慣用extension把delegate和原本的class區隔開來,覺得這樣比較簡潔不會都混在一塊。
接下來我們就試著在simulator上build並看看結果!儘量找一些檔案大一點的圖片,比較能看出效果:
留言
張貼留言