台北文化快遞&公園景點

HW# 17.2 回傳 JSON 格式資料的第三方 API

操作影片

兩個資料是用各自不一樣的程式碼寫成,TabeleView由於要用程式控制,所以都是使用Dynamic Phototypes。其他的話,兩種的Table View Cell,兩種的圖片下載方式,兩種的JSON資料讀取,兩種的將資料傳遞至下一頁。

短短幾秒的點擊,嘗試錯誤就要花幾個小時來慢慢修正,讀取JSON資料最困難的地方在於,每個資料都有各自的寫法,有時沒注意,就會讓程式無法讀取,而做許多白工,這是比較麻煩的地方。

下面的網頁對於JSON資料的解析,有很清楚解說,是用於JSONDecoder()的方法。

文化快遞

  1. Table View Cell是使用內建的 subtitle
  2. JSON的解讀是使用 JSONSerialization.jsonObject(with: data),重點在[String: Any]的設置。
  3. 圖片下載使用了 URLSession.shared.dataTask(with: url),程式放在顯示圖片的View Controller 的 func viewDidLoad() 中。
  4. 傳遞資料至下一頁則是使用 TableViewController的 func prepare(for segue: UIStoryboardSegue, sender: Any?)。

公園景觀

  1. Table View Cell是使用Custom,需要自己設置ImageView和Label元件,重點是不能忘記加入新增的 TableViewCell.swift 至 Cell 中,並將元件在 TableViewCell.swift拉線宣告,否則程式會出錯。
  2. JSON的解讀是使用 JSONDecoder(),重點在每一層 Struct 的設置。
  3. 圖片下載使用了 Pod SDWebImage,而 imageView.sd_setImage(with: url) 裡的 url 不能直接使用字串,要通過 url=URL(url: urlStr) 才能使用。程式一樣放在顯示圖片的View Controller 的 func viewDidLoad() 中。
  4. 傳遞資料至下一頁則是使用 tableView.dequeueReusableCell(withIdentifier: “Cell”, for: indexPath),因為程式碼需要有Action才能有動作,所以將程式放在TableViewController 的 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell,經由點即將資料傳至下一頁。
  5. 回上一頁則使用 dismiss(animated: true, completion: nil)

GitHub Link: