#25–3 期末< 3 >好味小姐罐頭訂購APP-URLSession下載資料

延續上一章,終於進入抓取資料了( ⸝⸝´꒳`⸝⸝)( ⸝⸝´꒳`⸝⸝)

功能:
1. UIActivityIndicatorView做讀取資料
2. 網路錯誤的處理
3. Banner自動輪播無限循環
4. Cache 資料
(Cache 資料好處:如果資料不常變動,可以考慮添加資料快取機制,避免每次都重新請求 API)
5.
防止將 API key 上傳到 GitHub

防止將 API key 上傳到 GitHub:

可以參考:

抓取資料的大綱:

  1. 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)

--

--