2
6

More than 3 years have passed since last update.

StructをJSON形式にして保存する

Last updated at Posted at 2020-10-06

Structをデバイスに恒久的に保存します。
アプリを閉じてもデータは残ります。
スクリーンショット 2020-10-07 6.45.50.png

手順

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)
}

🐣


お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

2
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6