从UserDefaults解码未返回任何数据



我正试图将Struct中的数据保存到UserDefaults中,然后从中读取。到目前为止,代码似乎可以对数据进行编码,但当我尝试解码时,它不会返回任何数据。

请在下面找到我的代码:

我的结构:

struct GameSetting: Codable {
var gameSetupText: String?
var gamePicker: Int
var groupSetupButton: Int }

写入用户默认值:

public let defaults = UserDefaults.standard
public let encoder = JSONEncoder()
func encodeDefault(dataModel: [GameSetting]) {
if let encodedModel = try? encoder.encode(dataModel) {
defaults.set(encodedModel, forKey: "encodedModel")
}
}

为了解码,我使用了以下代码:

public let decoder = JSONDecoder()

if let savedModel = defaults.value(forKey: "encodedModel") as? Data {

if let decodedData = try? decoder.decode(GameSetting.self, from: savedModel) {
print("Decoded data: (decodedData)")

}
}

我在SO和其他资源中搜索过,但似乎没有找到我需要的答案。希望你能帮助我,并就下一步该怎么做提供一些建议?

感谢您建议使用Do/Catch或Try/Catch,因为这表明我的代码中存在类型错误。我编码了一个数组:[GameSetting],但解码了一个字典GameSetting。更正后的代码在这里:

public let decoder = JSONDecoder()
if let savedModel = defaults.value(forKey: "encodedModel") as? Data {

if let decodedData = try? decoder.decode([GameSetting].self, from: savedModel) {
print("Decoded data: (decodedData)")

}
}

最新更新