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

はじめに

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

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に入れることができる。