Какова лучшая практика для сохранения и загрузки массива структуры? - PullRequest
0 голосов
/ 06 июня 2019

Я ищу совет, чтобы сохранить мой массив структур, чтобы они были доступны при запуске и могли быть легко доступны и обновлены.

Все уроки, которые я наблюдал, имеют только 1 экземпляр структуры, поэтому я не могу реализовать массив структур.

Структура данных:

    struct Stock : Codable {
        let ticker : String
        let amount : Double
        var boughtAt : Double
        var totalValue : Double
        var realTimePrice : Double
        var float : Double
        var type : String
    }

    var stocksArray = [Stock]()

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Поскольку ваш struct Stock соответствует Codable, вы можете легко сохранить array [Stock] в UserDefaults как data, используя JSONEncoder, то есть

var stocksArray = [Stock]()
do {
    let data = try JSONEncoder().encode(stocksArray)
    UserDefaults.standard.set(data, forKey: "stocksArray")
} catch  {
    print(error)
}

Аналогично, вы можете получитьс UserDefaults используя JSONDecoder как,

if let data = UserDefaults.standard.data(forKey: "stocksArray") {
    do {
        let arr = try JSONDecoder().decode([Stock].self, from: data)
        print(arr)
    } catch {
        print(error)
    }
}

Это один из способов хранения array.Есть и другие способы - CoreData, File и т. Д.

0 голосов
/ 06 июня 2019

По моему мнению, вы можете преобразовать свой тип Struct в словарь и добавить этот словарь в NSArray и сохранить этот массив в директорию Document телефона.

Пример,

struct Stock {
    var ticker : String = ""
    var amount : Double = 0.0
    var boughtAt : Double = 0.0
    var totalValue : Double = 0.0
    var realTimePrice : Double = 0.0
    var float : Double = 0.0
    var type : String = ""

    var json:Dictionary<String,Any> {
        set{
            self.ticker = newValue["ticker"] as! String
            self.amount = newValue["amount"] as! Double
            self.boughtAt = newValue["boughtAt"] as! Double
            self.totalValue = newValue["totalValue"] as! Double
            self.realTimePrice = newValue["realTimePrice"] as! Double
            self.float = newValue["float"] as! Double
            self.type = newValue["type"] as! String
        }
        get {
            return ["ticker":self.ticker,"amount":self.amount,"boughtAt":self.boughtAt,"totalValue":self.totalValue,"realTimePrice":self.realTimePrice,"float":self.float,"type":self.type]
        }
    }

    init(withJSON json:Dictionary<String,Any>) {
        self.json = json
    }
}
//Now, get dictionary from object and add it into array.
let stock = Stock(withJSON: [:])
let json = self.stock.json
let array = NSArray(arrayLiteral: json)

//Now, you can save NSArray to file.
array.write(toFile: "file path.plist", atomically: true)

//You can get array from plist file,
let array = NSArray(contentsOfFile: "file path.plist")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...