【Swift】NSKeyedArchiverでクラスをそのままUserDefaultsに保存する

この記事からわかること
- Swift/NSKeyedArchiverでクラスをそのまま保存する方法
- NSKeyedArchiver/NSKeyedUnarchiverクラスとは?
- 独自のクラスをData型に変換する方法
\ アプリをリリースしました /
参考文献:公式リファレンス:Caching on Swift Using NSKeyedArchiver
NSKeyedArchiverクラスとは?
NSKeyedArchiver
はオブジェクトのデータをキーによって参照されるアーカイブに保存するエンコーダークラスです。オブジェクトをファイルなどへの保存に適した、アーキテクチャに依存しない形式にエンコードする方法を提供しています。
独自に定義したクラスも構造を保ったままData
型にエンコードすることでコード内での扱いやすさも向上します。
NSKeyedUnarchiverクラスとは?
NSKeyedUnarchiver
はキーによって参照されるアーカイブからデータを復元するデコーダークラスです。NSKeyedArchiver
と逆側の処理を担っています。
クラスをそのままUserDefaultsに保存する
この2つのクラスを使用することで独自に定義したクラスをUserDefaultsに保存し、取得することができるようになります。
流れ
- 独自クラスの定義
- NSObject/NSCodingへの準拠
- encode(with coder: NSCoder)/required init?(coder: NSCoder)の実装
- クラスをエンコードしてアーカイブを作成しUserDefaultsに保存
- UserDefaultsから取り出したアーカイブをデコードしてクラスに変換
まずは独自のクラスを定義します。
NSObject
とNSCoding
に準拠させます。NSCoding
に準拠させたことでencode(with coder: NSCoder)
メソッド(エンコード処理用)とrequired init?(coder: NSCoder)
(デコード処理用)の実装が必須となります。
あとは保存したいクラスをアーカイブに変換しUserDefaultsに保存する処理とUserDefaultsに保存されているアーカイブをデコードしてクラスに変換する処理を書けば完成です。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。