はじめに
大したことではないのですが、よく忘れるのでメモ。
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に入れることができる。