SwiftでSwiftyUserDefaultsに色々なデータを入れる。

  • 0
    いいね
  • 0
    コメント

    はじめに

    大したことではないのですが、よく忘れるのでメモ。

    Archiver

    class Archiver: NSObject {
        // 指定のデータをアーカイブします。
        static func encrypt(rootObject: Any) -> Data {
            return NSKeyedArchiver.archivedData(withRootObject: rootObject)
        }
    
        // アーカイブデータを解凍して返します。
        static func decrypt<T>(data:Data) -> T? {
            return NSKeyedUnarchiver.unarchiveObject(with: data) as? T
        }
    }
    

    SwiftyUserDefaultsにデータを入れる。

    色々なデータを入れたいので以下のようなアクセッサを作る。

        static var createdAt:Hoge? {
            get {
                if let data = Defaults[.createdAt:Date] {
                    return Archiver.decrypt(data: data)
                }
                return nil
            }
            set {
                if let newValue = newValue {
                    Defaults[.createdAt:Date] = Archiver.encrypt(rootObject: newValue)
                } else {
                    Defaults[.createdAt:Date] = nil
                }
            }
        }
    

    これを使えば独自クラス(NSCoding実装済みクラス)でもSwiftyUserDefaultsに入れることができる。