學習Swift之旅#9 — 串接第三方 API，解析 JSON 資料，轉換成自訂型別顯示
彼得潘作業#15–4 研究有哪些回傳 JSON 格式資料的有趣第三方 API，讀取資料做一個 App 。

作業目的

學習利用 URLSession 抓取後台的 JSON 資料，利用 JSONDecoder 和 Codable 將 JSON 資料生成自訂型別。

流程

以 iTunes 搜尋 Taylor Alison Swift 當例子，API 的網址為

https://itunes.apple.com/search?term=TaylorAlisonSwift&media=music

後台回傳的資料利用網站 JSON Editor Online 顯示後如下:

按照 iTunes 回傳的 JSON ，第一層是 object，object key results 的資料是 array，array 裡裝了許多歌曲 object。

因此定義了型別 SearchResponse 對應第一層的 object， StoreItem對應歌曲的object，並將 property results 的型別宣告為 [StoreItem]，說明它是 array。

這裏將 SearchResponse & StoreItem 分開定義(也可寫一起定義)。

struct SearchResponse:Codable {

let resultCount: Int

let results: [StoreItem]

} struct StoreItem:Codable {

let artistName: String

let trackName:String // 曲名

let collectionName:String? // 專輯名稱

let previewUrl:URL

let artworkUrl100:URL // image url

let trackPrice:Double? // 價錢

let releaseDate:Date

let isStreamable:Bool?

}

其中，StoreItem 的部分 property 被宣告為 optional，因為 JSON 裡有些 key 不會每一筆資料都有，像是trackPrice，不是每首歌都可以買，所以不一定有 trackPrice。因此將不一定會有的 collectionName、trackPrice 及isStreamable 設為 optional。如果沒有設為 optional，到時候一旦發現沒有這些欄位，將造成轉換失敗。

從回傳的資料得知時間格式採用 iso8601

抓取網路資料，使用JSONDecoder將JSON轉換成SearchResponse型別的資料。

成果

顯示音樂清單

參考資料

之後補充

[作業 6: viewDidLoad，array & custom controller class] 6–2 : 模仿 iOS 的 Music App 製作情歌點唱機，可忽略進階功能
['Vivienne Chen']
['Swift', 'Xcode']