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


🐣

일 상담 여기까지
로쿠키 시코쿠 @ g 마이 l. 이 m

Core ML을 사용하여 앱을 만들고 있습니다.
기계 학습 관련 정보를 발신하고 있습니다.

트위터
Medium

좋은 웹페이지 즐겨찾기