问题描述
我有这个结构
struct dispItem: Identifiable,Codable {
let id = UUID()
let name: String
}
我通过这种方式在 UserDefaults 中有:
init() {
if let items = UserDefaults.standard.data(forKey: "dispItems") {
let decoder = JSONDecoder()
if let decoded = try? decoder.decode([dispItem].self,from: items) {
self.items = decoded
return
}
}
self.items = []
}
在“分配”类中。
在另一个 Swift View 文件中,我想加载这个 UserDefaults“dispItems”并循环这些值。 我仍然处于 Swift/SwiftUI 的开头,我用来存储它的代码取自几个教程。 我假设如果我这样做加载它:
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(items) {
UserDefaults.standard.set(encoded,forKey: "Items")
}
但我假设“项目”将包含一个结构;如何获取值并将它们显示在 ForEach 循环中?
谢谢 马可
解决方法
我喜欢使用 UserDefaults.standard.set(try? PropertyListEncoder().encode(items),forKey: "DispItems")
。这样你就可以编码,然后你可以使用
typealias DispItems = [DispItem]
guard let data = UserDefaults.standard.object(forKey: "player") as? Data else {
return
}
guard let dispItems = try? PropertyListDecoder().decode(DispItems.self,from: data) else {
return
}
dispItems.forEach{
//Do what you'd like with the items
}