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