#25–3 期末< 3 >好味小姐罐頭訂購APP-URLSession下載資料
延續上一章,終於進入抓取資料了( ⸝⸝´꒳`⸝⸝)( ⸝⸝´꒳`⸝⸝)
功能:
1. UIActivityIndicatorView做讀取資料
2. 網路錯誤的處理
3. Banner自動輪播無限循環
4. Cache 資料
(Cache 資料好處:如果資料不常變動,可以考慮添加資料快取機制,避免每次都重新請求 API)
5. 防止將 API key 上傳到 GitHub
防止將 API key 上傳到 GitHub:
可以參考:
抓取資料的大綱:
- UIActivityIndicatorView做讀取資料:
新增一個UIActivityIndicatorView到storyboard並且拉outlet:
寫加載跟隱藏的func:
到時候加到抓取資料的func中~
你可以在attribute inspector調整大小顏色:
參考資料:
2. 網路錯誤的處理:
⏺發生網路錯誤的原因:
1. 網絡連接問題(例如,無法連接到服務器)
2. DNS查詢失敗
3. 請求超時
舉超時的例子:
我們加入以下程式碼,並將URLSession備註起來,
這程式碼意思就是把時間往後多一秒
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.hideLoadingIndicator()
self.showErrorAlert(message: "網絡錯誤,請稍後再試。")
}
⏺檢查HTTP響應狀態碼是不是200:
我們可以用simulator接到error500來模擬~
let simulatedHttpResponse = HTTPURLResponse(url: url, statusCode: 500, httpVersion: nil, headerFields: nil)
if let httpResponse = simulatedHttpResponse, httpResponse.statusCode != 200 {
print("HTTP 錯誤:\(httpResponse.statusCode)")
self.showErrorAlert(message: "服務器錯誤,請稍後再試。")
return
}
以下是網路錯誤及響應error的code~
錯誤的視窗func:
3. 找不到資料錯誤的處理:
這就應該不用模擬了,通常抓取資料你的models裡的struct, enum任何的值只要跟JSON格式不同,你就找不到資料~
4. 儲存網路上抓到的數據:
在class創一個儲存所有的罐頭商品數據
5. 做一個快取資料的Models:
做一個字典來存取抓取到的資料
資料獲取的程式參考:
Banner自動輪播無限循環:
可以參考這篇:
抓取到的資料在TableViewCell顯示:
其實還有很多內容就不提了,像是AutoLayout
有機會再來提客製SegmentedControl
下一篇應該就是把資料傳到下一頁去~
p(´⌒`。q)p(´⌒`。q)p(´⌒`。q)