構造体をUserDefaultに保存する
以下の構造体をUserDefaultに保存したい時
struct Yasai: Codable {
let name: String
let price: Int
}
保存
UserDefaults.standard.set(try? PropertyListEncoder().encode([ninjin]), forKey:"yasai")
UserDefaults.standard.synchronize()
取得
if let data = UserDefaults.standard.value(forKey:"yasai") as? Data {
let yasai = try? PropertyListDecoder().decode(Array<Yasai>.self, from: data)
print(yasai?.first)
} else {
print("失敗")
}
どうなってんの?
UserDefaultに保存する時PropertyListDecoderに構造体を渡してエンコードしています。
PropertyListDecoderによってYasaiの構造体がデータ型に変換されてます。
エンコードの例でわかりやすい画像があったのでNVRブログさんからお借りしてきました
実際に値を使用する際にデコードをして元の形に戻して構造体を取得しています。
そして忘れてはいけないのが、Yasai構造体がエンコード、デコードできるのはCodableプロパティに準拠しているから!
typealias Codable = Decodable & Encodable
Codableは何者なのか定義元を確認してみるとDecodable & Encodableそのまんまでした!エンコードとデコードをしたい時はCodable🤖