Хранение массива массива пользовательского класса - Swift - PullRequest
2 голосов
/ 01 июля 2019

Я пытаюсь выучить Swift и испытываю трудности с сохранением массива моего пользовательского класса.Вот мои классы

import Foundation

class Entry {
   var company: String
   var category: String
   var amount: Double
   var type: String

   init() {
      self.company = ""
      self.category= ""
      self.amount= ""
      self.type= ""
   }
}

У меня есть другой класс, который представляет собой массив записей, называемый чековой книжкой

import Foundation

class Checkbook {
   var entries = [Entry]()

   init() {
      self.entries = []
   }
}

Затем в контроллере моего представления у меня есть массив чековых книжек.Мне нужно сохранить этот массив чековых книжек, чтобы он сохранял все свои данные при следующем запуске приложения.Каков наилучший способ сделать это?

1 Ответ

2 голосов
/ 01 июля 2019

Вы можете использовать протокол Codable для кодирования и декодирования ваших классов в файл JSON, но я рекомендую использовать структуры:

struct Entry: Codable {
    let company, category, type: String
    let amount: Double
}

struct CheckBook: Codable {
    var entries: [Entry] = []
}

extension FileManager {
    static let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
}

Тестирование игровой площадки:

let checkBooks: [CheckBook] = [.init(entries: [.init(company: "ACME", category: "JSON", type: "Swift", amount: 5.0)])]
do {
    let destinationURL = FileManager.documentDirectory.appendingPathComponent("CheckBooks.json")
    try JSONEncoder().encode(checkBooks).write(to: destinationURL)
    print("json encoded/saved")
    let loadedCheckBooks = try JSONDecoder().decode([CheckBook].self, from: .init(contentsOf: destinationURL))
    print(loadedCheckBooks)  // CheckBook(entries: [Entry(company: "ACME", category: "JSON", type: "Swift", amount: 5.0)])\n"
} catch { 
    print(error) 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...