Загрузите 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 = []
}

Внутри класса Dispense.

Внутри другого файла Swift View я хотел бы загрузить этот элемент UserDefaults DispItems и циклически перебирать значения. Я все еще нахожусь в начале Swift / SwiftUI, и код, который я использовал для его хранения, был взят из нескольких руководств. Я предполагаю, что если я загружу его таким образом:

let encoder = JSONEncoder()
        if let encoded = try? encoder.encode(items) {
            UserDefaults.standard.set(encoded, forKey: "Items")
        }

Но я предполагаю, что элементы будут содержать Struct; как я могу взять значения и отобразить их внутри цикла ForEach?

Спасибо Марко


person MarcoGT    schedule 19.02.2021    source источник


Ответы (1)


Мне нравится использовать 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
}
person The Swift Coder    schedule 19.02.2021