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)
}
🐣
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。