Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 757

[Swift]UserDefaultsでstructを保存する方法

$
0
0
はじめに この記事ではUserDefaultsに自作のstruct、structの配列を保存する方法をしまします。この方法のほかにもっと良い方法があれば教えてください。よろしくお願いします。 概要 自作のstructのインスタンスをencodeしてData型に変換することでUserDefaultsに保存します。 UserDefaultsからデータを取得する際はdecodeすることでもとに戻し、使えるようにします。 前半では自作のstructを保存、取得する方法を紹介します。 後半では自作のstructを配列にして保存する方法を紹介します。 structを作る まずは任意のstructを作成します。 今回は以下のように作成しました。 自作のstrucrにはCodableを準拠させます。 struct Pirate: Codable { let name: String let age: Int let siblings: [String]? } インスタンス化 今回は以下のようにインスタンスを作成しました。 let rufy = Pirate(name: "ルフィ", age: 19, siblings: ["エース","サボ"]) encode UserDefaultsに保存するためにData型に変換します。 let encoder = JSONEncoder() encoder.keyEncodingStrategy = .convertToSnakeCase guard let crew = try? encoder.encode(mugiwaraFamily) else { return } 保存 UserDefaultsに保存します。 forkeyはString型で自分の好きなkeyを設定してください。 保存したデータを取得するときにkeyを使います。 これで保存は完了です。 UserDefaults.standard.set(crew, forKey: key) 取得 decodeしてData型から変換します。 forkeyは保存したときに設定したkeyを指定します。 これで、定数「rufy」の中に保存していた値を取得することができます。 let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase guard let data = UserDefaults.standard.data(forKey: key), let rufy = try? decoder.decode(Pirate.self, from: data) else { return } 自作structの配列を保存する 以下のように配列を作成します。保存の方法は同じなので省略します。 let mugiwaraFamily: [Pirate] = [ Pirate(name: "ルフィ", age: 19, siblings: ["エース","サボ"]), Pirate(name: "ゾロ", age: 21, siblings: nil ), Pirate(name: "ナミ", age: 20, siblings: ["ノジコ"]), Pirate(name: "ウソップ", age: 19, siblings: nil ), Pirate(name: "サンジ", age: 21, siblings: ["イチジ","ニジ","ヨンジ","レイジュ"]) ] 取得 取得方法もほとんど変わらないのですが、4行目を[Pirete]とすることで、自作structの配列を取得できます。 let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase guard let data = UserDefaults.standard.data(forKey: key), let crew = try? decoder.decode([Pirate].self, from: data) else { return } おわりに いかがだったでしょうか?何か間違っているところや、もっと良い方法があればご指導ください。よろしくお願いします。 参考リンク

Viewing all articles
Browse latest Browse all 757

Trending Articles