StructをJSON形式にして保存する
Structをデバイスに恒久的に保存します。
アプリを閉じてもデータは残ります。
手順
1、StructをCodableにして、JSON形式でエンコード、デコードできるようにする。
struct Chocolates: Codable {
var milk: String = " Mild and sweet. "
var bitter: String = " Taste for the adult. "
var white: String = " It's okay once in a while. "
var numberOfMilk:Int = 0
var numberOfBitter:Int = 0
var numberOfWhite:Int = 0
init(numberOfMilk milk:Int,numberOfBitter bitter:Int,numberOfWhite white:Int){
self.numberOfMilk = milk
self.numberOfBitter = bitter
self.numberOfWhite = white
} // 初めて作る時用イニシャライザ
// ここから下がJSON形式にエンコード・デコードできるようにする部分
var json: Data? { // 自身のJSONにエンコードされた形式を返す計算プロパティ
return try? JSONEncoder().encode(self)
}
init?(json: Data) { // 保存されたJSON形式のDataをデコードしてStructを復元するイニシャライザ
if let newValue = try? JSONDecoder().decode(Chocolates.self, from: json) {
self = newValue
} else {
return nil
}
}
}
2、StructのJSONバージョンを作る
var chocolates = Chocolates(numberOfMilk: 3, numberOfBitter: 1, numberOfWhite: 2)
let json = chocolates.json
3、File Managerで書き込み先URLを作って書き込む
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("chocolates.json") else { return }
do {
try json.write(to: url)
} catch let error {
print(error)
}
4、読み出し
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("chocolates.json") else { return }
do {
let jsonData = try Data(contentsOf: url)
var readChocolates = Chocolates(json: jsonData)
} catch let error {
print(error)
}
🐣
お仕事のご相談こちらまで
[email protected]
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。
Author And Source
この問題について(StructをJSON形式にして保存する), 我々は、より多くの情報をここで見つけました https://qiita.com/john-rocky/items/9dcf715f24f7e200115b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .