我正在嘗試從 JSON 檔案實作資料管理器單例類讀/寫,但我收到此錯誤:
'self' used in method call 'LoadData' before all stored properties are initialized
這是代碼:
import SwiftUI
import Combine
class DataManager: ObservableObject {
static let shared = DataManager()
var TTDItemMainList: TTDItemList = TTDItemList(itemList: [TTDItem(id: UUID(), itemDesc: "", itemCreaDate: Date(), itemUpdDate: Date(), itemTags: [], linkedItemsUID: [])])
var urlFile: URL
init() { LoadData() }
func LoadData() {
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
let urlFile = getDocumentsDirectory().appendingPathComponent("/SMT.json")
do {
let data = try Data(contentsOf: urlFile)
let decoder = JSONDecoder()
TTDItemMainList = try decoder.decode(TTDItemList.self, from: data)
} catch {
debugPrint(error.localizedDescription)
}
}
func saveData() {
let encoder = JSONEncoder()
do {
let data = try encoder.encode(TTDItemMainList)
try data.write(to: urlFile)
} catch {
debugPrint(error.localizedDescription)
}
}
}
我不明白如何重組代碼來避免這個問題。
uj5u.com熱心網友回復:
你沒有urlFile在你的init. 事實上,你從來沒有設定它(后來,你let urlFile = 是本地范圍的)。
最簡單的解決方案看起來像urlFile變成一個計算屬性:
class DataManager: ObservableObject {
static let shared = DataManager()
var TTDItemMainList: TTDItemList = TTDItemList(itemList: [TTDItem(id: UUID(), itemDesc: "", itemCreaDate: Date(), itemUpdDate: Date(), itemTags: [], linkedItemsUID: [])])
var urlFile: URL { //<-- Here
getDocumentsDirectory().appendingPathComponent("/SMT.json")
}
init() { loadData() }
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
func loadData() {
do {
let data = try Data(contentsOf: urlFile)
let decoder = JSONDecoder()
TTDItemMainList = try decoder.decode(TTDItemList.self, from: data)
} catch {
debugPrint(error.localizedDescription)
}
}
func saveData() {
let encoder = JSONEncoder()
do {
let data = try encoder.encode(TTDItemMainList)
try data.write(to: urlFile)
} catch {
debugPrint(error.localizedDescription)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/448377.html
下一篇:頁面加載后微調器加載影片不會消失
