微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加载 UserDefault 并循环它们

如何解决加载 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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。