iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
Mobile Development

麻瓜學習 iOS 開發系列 第 23

Day23:傳入 JSON 文件

  • 分享至 

  • xImage
  •  

前言

上一篇文章我 hard code 了一些數據進去我的專案,
現在要來把這些數據放進 JSON 文件裡,
並將這些接入 app。

實作

  • 創建一個 Data 文件夾並在裡面創建一個空的 JSON 文本
  • 補充 JSON 文件

    這裡的內容會比昨天 hard code 的內容豐富一些
  • Parse JSON
  1. 在 model 裡,根據 JSON 文件的內容創建 properties

    id 不一定存在,所以 變數 id 會是可選的,
    這個 Recipe class 也要符合 Decodable 協議
  2. 新建一個 Service file,將在這裡傳入數據

    這樣做便於維護專案
  3. 傳入 JSON 文件
    創建一個導向 json 文件的 url 地址,
    並檢查是否為 nil:
let pathString = Bundle.main.path(forResource: "recipes", ofType: "json")
guard pathString != nil else {
    return [Recipe]()
    }

創建 url 對象:

 let url = URL(fileURLWithPath: pathString!)

創建數據對象:

do {
    let data = try Data(contentsOf: url)
}
catch {
    print(error)
}

解碼:

let decoder = JSONDecoder()
do {
    let recipeData = try decoder.decode([Recipe].self, from: data)
}
catch {
    print(error)
} 

設置 id:

for r in recipeData {
    r.id = UUID()
}
return recipeData


會看到 Xcode 顯示一個 error,
因為我們可能創建數據失敗,
所以需要回傳一個空的 Recipe array:

4. 回到 ViewModel 在 init 創建實例獲取數據:
因為我們會反復調用 class DataServise 裡的 function,
所以用 static 修飾這個 function,
使其變成一種靜態方法,不需創建實例就能直接調用。


上一篇
Day22:動手做一個 app 吧
下一篇
Day24:使i用 ForEach、ScrollView 構建 UI
系列文
麻瓜學習 iOS 開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言