1.%d Xcode操作時一些觀念紀錄(一)
目錄
⦿ 串接API的重點,JSON文件
⦿ 自訂型別的重點
⦿ 解析JSON
串接API的重點,JSON文件
Swift 4 以前將 JSON 文件解析為方便使用的自訂型別還需透過第三方套件,而有了 JSONDecoder 和 Codable 以後便不再需要如此搞剛。
首先,JSON 存儲了既定的龐雜資料,雖然方便但一般來說不易讀,我們可透過一些網站來對 JSON 文件做初步整理,如 JSON Editor Online,此網站幫助排列抓取的 JSON文件,因為我們需要看 Dictionary 裡的 key : value,以方便了解在自訂型別及宣告變數時採取的策略。
如上圖,如果 Call API 得到未整齊排列的 JSON 資料,經過網站處理,排列成易讀的階層格式。
當然,我認為上述功能也未必要靠網站才能達成,你自己打開 JSON文件,對第一筆資料敲幾下 ENTER 也能排列出可讀性高的 JSON。
繼續閱讀|回目錄
自訂型別的重點
接著是自訂型別:
struct JSONData: Codable {
let someID: Int
let someone: String
let somedata: URL
}class JSONDataTableViewController: UITableViewController {
var jsonDatas: [JSONData] = [ ] //[ ]為初始化,也可令為 optional
}
諸如此類,但必須注意幾件事:
(1) 網址包含中文,此時需宣告為 String 再轉為 URL。
(2) 不同時間( Date )有不同策略。
(3) 因為 key 不一定有 value,此時宣告為 optional ( 如 String? )。
(4) 有時 JSON 第一層即為陣列,我們便宣告為 Array。
(5) property名 務必正確對應到 JSON 裡的 key名,且型別務必正確。
以上最重要的是第五點。
繼續閱讀|回目錄
解析JSON
接著是解析從 URL 抓取的 JSON 資料:
let myUrl = "Url a.k.a. IP Address"if let url = URL(string: myUrl) {
URLSession.shared.datatask(with: url) { data, response, error in
let decoder = JSONDecorder()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
decorder.dateDecodingStrategy = .iso8601 //轉換不同時間格式的策略
if let data = data {
do { let jsonDatas = try decoder.decord([JSONData].self,
from: data)
self.jsonDatas = jsonDatas DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print(error)
} } else {
print("error")
}
}.resume()
}
此為解析 JSON 文件,將資料放到 TableView 的 Cell 去顯示,當然,我們也可以設置一個方法後丟到 viewDidLoad( ) 去呼叫。
不過,此方法在閉包裡省去處理 error、response,即是就算有錯,或任何一種 HTTPResponse 的情況,程式都會往下執行。
後面用了do & catch,是做前一件事時,若有錯誤則拋出,這邊我選擇將之印出來。
繼續閱讀|回目錄