gpt4 book ai didi

swift - 使用 Swift 将可编码结构保存到 UserDefaults

转载 作者:行者123 更新时间:2023-12-03 23:13:11 26 4
gpt4 key购买 nike

我正在尝试对结构进行编码

struct Configuration : Encodable, Decodable {
private enum CodingKeys : String, CodingKey {
case title = "title"
case contents = "contents"
}
var title : String?
var contents: [[Int]]?
}

转换成 JSON 以存储在 UserDefaults.standard 的本地键中。我有以下代码:
let jsonString = Configuration(title: nameField.text, contents: newContents)
let info = ["row" as String: jsonString as Configuration]
print("jsonString = \(jsonString)")
//trying to save object
let defaults = UserDefaults.standard
let recode = try! JSONEncoder().encode(jsonString)
defaults.set(recode, forKey: "simulationConfiguration")
//end of saving local

打印返回:
jsonString = Configuration(title: Optional("config"), contents: Optional([[4, 5], [5, 5], [6, 5]]))

所以我相信我正确地创建了对象。但是,当我下次运行模拟器时尝试检索 key 时,我什么也得不到。
我把以下内容放在 AppDelegate 中,它总是返回 No Config。
let defaults = UserDefaults.standard
let config = defaults.string(forKey: "simulationConfiguration") ?? "No Config"
print("from app delegate = \(config.description)")

有任何想法吗?谢谢

最佳答案

您在这里保存了 Data值(这是正确的)

defaults.set(recode, forKey: "simulationConfiguration")

但是在这里您正在阅读 String
defaults.string(forKey: "simulationConfiguration")

您无法保存 Data , 阅读 String并期待它起作用。

让我们修复您的代码

首先,您不需要手动指定编码 key 。所以你的结构就变成了这个
struct Configuration : Codable {
var title : String?
var contents: [[Int]]?
}

保存

现在这是保存它的代码
let configuration = Configuration(title: "test title", contents: [[1, 2, 3]])
if let data = try? JSONEncoder().encode(configuration) {
UserDefaults.standard.set(data, forKey: "simulationConfiguration")
}

加载中

这是阅读它的代码
if
let data = UserDefaults.standard.value(forKey: "simulationConfiguration") as? Data,
let configuration = try? JSONDecoder().decode(Configuration.self, from: data) {
print(configuration)
}

关于swift - 使用 Swift 将可编码结构保存到 UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697001/

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