// // Info.swift // Lunch Card (iOS) // // Created by Joshua Srery on 12/21/20. // Additional code by OOPer on Apple Developer Forums // import Foundation struct CardInfo: Identifiable, Codable { var name: String = "" var id: String = "" var cname: String = "" var code: String = "" var color: String = "" } class CardsInfo: ObservableObject { @Published var newCard: CardInfo = CardInfo() @Published var cards: [CardInfo] = [] func add() { cards.append(newCard) } } extension CardsInfo { var dataUrl: URL { FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] .appendingPathComponent("cards.json") } func saveCards() { do { //Convert Array of `CardInfo` to `Data` let data = try JSONEncoder().encode(cards) //Write `Data` to a file specified by URL try data.write(to: dataUrl, options: .atomic) } catch { print(error) } } func loadCards() { do { if !FileManager.default.fileExists(atPath: dataUrl.path) { return } let data = try Data(contentsOf: dataUrl) let cards = try JSONDecoder().decode([CardInfo].self, from: data) self.cards = cards } catch { print(error) } } } class SheetInfo: ObservableObject { @Published var showSheetView = false }