1.%d Xcode操作時一些觀念紀錄(一)

春麗 S.T.E.M.
4 min readJun 3, 2021

--

目錄
⦿ 串接API的重點,JSON文件
⦿ 自訂型別的重點
⦿ 解析JSON

串接API的重點,JSON文件

Photo by Markus Spiske on Unsplash

Swift 4 以前將 JSON 文件解析為方便使用的自訂型別還需透過第三方套件,而有了 JSONDecoder 和 Codable 以後便不再需要如此搞剛。

首先,JSON 存儲了既定的龐雜資料,雖然方便但一般來說不易讀,我們可透過一些網站來對 JSON 文件做初步整理,如 JSON Editor Online,此網站幫助排列抓取的 JSON文件,因為我們需要看 Dictionary 裡的 key : value,以方便了解在自訂型別宣告變數時採取的策略。

JSON Editor Online

如上圖,如果 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,是做前一件事時,若有錯誤則拋出,這邊我選擇將之印出來。

繼續閱讀|回目錄

--

--

春麗 S.T.E.M.
春麗 S.T.E.M.

Written by 春麗 S.T.E.M.

Do not go gentle into that good night, Old age should burn and rave at close of day; Rage, rage, against the dying of the light.

No responses yet