加载 UserDefault 并循环它们

问题描述

我有这个结构

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
}