iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 12
0
Software Development

30天Swift入門學習系列 第 12

iOS App 實作(10)Parsing data form API


Description:
JSON 是一種資料交換格式,以純文字為基礎來儲存與傳送結構資料。其經由特定的格式來儲存文字資料以方便和其他程式交換資料。
此 demo 是透過使用者輸入 github 帳號後並透過 Swift 4 所提供的 JSONDecoder 將所輸入之帳號標註 stars 的資訊顯示出來。


Component:

  1. UITextField
  2. UITableView
  3. JSONDecoder

Highlight function:
初始化接收 API 資料所需之資料結構:

var cellData: [starInfo] = [starInfo]()

從特定網址接收資料:

func getData(_ link: String) {
    let url: URL = URL(string: link)!
    let session = URLSession.shared
    let request = URLRequest(url: url)
    
    let task = session.dataTask(with: request, completionHandler: {
      (data, response, error) in
      
      self.extractData(data)
    })
    task.resume()
  }

透過 Swift 本身所提供的 JSONDecoder 來解析並儲存資料:

  func extractData(_ data: Data?) {
    if(data == nil) {
      print("No data, data is nil")
      return
    }
    
    do {
      cellData = try JSONDecoder().decode([starInfo].self, from: data!)
    } catch {
      getError = true
      print("Error:", error.localizedDescription)
    }
    refreshTable()
  }

Additional:
下圖為透過 github api 回傳部分帳號資訊:

在建立 json 資料儲存格式時,資料欄位只能少不能多。另外也需注意某些欄位會因沒有輸入資料而導致該欄位為 nil。

struct Owner: Codable {
  let login      : String
  let id         : Int
  let avatar_url : URL
  let type       : String
  let site_admin : Bool
}

struct starInfo: Codable {
  let id              : Int
  let name            : String
  let full_name       : String
  let owner           : Owner
  let description     : String?
  let forks           : Int
  let stargazers_count: Int
}

Reference:
Source code on Github


上一篇
"available" keyword in Swift
下一篇
Access Control in Swift
系列文
30天Swift入門學習30

尚未有邦友留言

立即登入留言