gpt4 book ai didi

ios - JsonEncoder 总是返回空数组

转载 作者:行者123 更新时间:2023-11-28 05:44:50 27 4
gpt4 key购买 nike

我试图将结构数组保存到 UserDefaults 中,但我无法弄清楚为什么 JsonEncoder 会返回空数据。我有符合 Codable 协议(protocol)的设置模型

struct MenuItem : Codable{
let name : String?
let icon : String?

init(name : String?, icon : String?){
self.name = name
self.icon = icon
}
}

并且还创建了默认管理器以将其保存到用户默认值中。

class DefaultsManager {

static let shared = DefaultsManager()

init(){}

var items: [MenuItem]{
get{
if let json = UserDefaults.standard.data(forKey: "key"){
return decodeFromJson(jsonData: json)
} else {
return []
}
}
set{
let json = codeToJson(data: items)
UserDefaults.standard.set(json, forKey: "key")
}
}

fileprivate func codeToJson<T:Codable>(data: Array<T>) -> Data?{
do {
return try JSONEncoder().encode(data)
} catch {
print(error)
return nil
}
}

fileprivate func decodeFromJson<T:Codable>(jsonData: Data) -> [T]{
do {
return try JSONDecoder().decode(Array<T>.self, from: jsonData)
} catch {
print(error)
return []
}
}
}

但无论我做什么,JsonEncoder 都会返回空数据。我尝试用谷歌搜索但没有成功。

最佳答案

这是一个很常见的错误。

在计算属性的 setter 中,新值 由隐式 newValue 变量表示,它不是属性本身。

set {
let json = codeToJson(data: newValue)
UserDefaults.standard.set(json, forKey: "key")
}

关于ios - JsonEncoder 总是返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com