題目及內容取自於 : ChaoCode 頻道
網址連結:
筆記:
> 串接API: 新增最愛項目
> 讓 stub 根據 endPoint 回傳不同資料
> 處理網路狀態碼錯誤
> 串接 API : 讀取最愛項目
> 解析日期
> 修改: 將 CatImageViewModel 改為剛剛建立的 FavoriteResponse
> 串接 API : 刪除最愛項目
> 最終畫面
讓 stub 根據 endPoint 回傳不同資料 -
接著在 Test 中新增測試 addFavorite 是否正確執行,但目前的 stub 都是回傳一樣的資料,跟前面介紹新增最愛項目的回傳結果不一樣,因此這邊要修改成根據 endPoint 回傳不同的內容,才能使 addFavorite 的測試正確。
在 CatAPIManager 中,用 Enum 建立 EndPoint
( 圖片跟最愛項目2個 case )
新增一個新檔案管理 EndPoint ,並建立 stub ,根據 case 回傳不同資料
接著在 EndPoint 建立 request 屬性,將原先的網路呼叫 function 做調整,根據不同 case 有不一樣的 URLRequest,再更改取得 Data 的方式
shared ( URLRequest ) 、 stub ( 固定資料 ) 裡面各自針對 .image 跟 addToFavorite 都有個別的回傳
接著到 Test ,檢查 addToFavorite 是否回傳正確的值
最後回到主畫面修改呼叫API的地方
串接 API : 讀取最愛項目 -
跟上面一樣透過一個 EndPoint 去取得 Data
更改調整之前的 Code
接著在 EndPoint 建立 .favorites 的 case
創建一個 FavoriteResponse 的 Model 來處理最愛項目的資料,
而在新增、刪除 favorites 也會需要用到 APIkey ,所以將 key 改至 session 中
( header 可以在 session 中,透過 configuration 統一設定)
最後就可以建立 function 來 getFavorites 資料
解析日期-
這邊我們至 Test 中,測試 stub 中的 imageURL 是否取得正確,點下測試後,在 console 中可以看到執行失敗的資訊
這是因為解碼過程中,日期(Date)的解碼,不是預期的類型導致( Type mismatch )
在這邊可以對於 decoder 做一些調整
回到 Test ,再執行一次就能夠成功 Decode 了
修改: 將 CatImageViewModel 改為剛剛建立的 FavoriteResponse -
將原先的 CatImageViewModel 改為使用剛才建立的 FavoriteResponse
因為變為 FavoriteItem ,下面這些原本取得圖片的 \.id 改為 \.imageID
接著在 add (新增至我的最愛項目中) 裡,需要是 FavoriteItem ,所以新增一個 CatImageViewModel 啟動方法
建立好後,回到 add 中做修改
此時會跳出一個 Error ,說類型錯誤
所以到 CatImageViewModel 中,新增一個 FavoriteItem 的啟動方法 (與上面剛好相反 ( CatImageViewModel ↔ FavoriteItem )
這時候還是有個 Error,告訴我們 .animation 動畫追蹤的 value 必須 conforms to Equatable,才能知道 value 有沒有變化,作為變化是否更新的依據,所以幫 Favorite 添加遵從 Equatable 這個 Protocol
串接 API : 刪除最愛項目 -
會需要在 apiManager 、網路端刪除,先將 add、remove 這兩個 Function ,放到 [FavoriteItem] 的 extension 中,最後要做到呼叫 .remove 時,兩個都被刪除
接著先做設備上的刪除
再來做呼叫網路端的刪除
先新增 刪除的 EndPoint
再建立 Function ,向伺服器發出刪除的請求
最後回到 [FavoriteItem] extension 中的 .remove ,呼叫剛剛在 APIManager 中建立的 removeFromFavorite
最終畫面 -
可以看出以下缺點: (下一集處理)
- 載入 / 重整 : 載入畫面不流暢
- 新增 : 點擊 2 下,愛心出現有延遲
- 刪除 : 移除最愛項目時也有延遲