オブジェクトをUserDefaultsに保存したくなりました。
Swiftでは、UserDefaultsに保存できるオブジェクトはプリミティブな幾つかのものに限られていますが、
それ以外のオブジェクトでも、Data
に変換することでUserDefaultsに保存することができます。
これを実現するために、UserDefaultsにとっておきたいクラスでシリアライズとデシリアライズをサポートする必要があります。
Swift 3で使えそうな例を載せておきます。
注意
もし 複雑なデータを永続化しようとしている なら Realm を検討するべきだと思います。認証用の文字列とかなら https://github.com/kishikawakatsumi/KeychainAccess がよいです。
コード
Class
Swift
class Hoge: NSObject, NSCoding {
var name = ""
var hoge = ""
var fuga = ""
}
Deserialize
Swift
required init(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.hoge = aDecoder.decodeObject(forKey: "hoge") as! String
self.fuga = aDecoder.decodeObject(forKey: "fuga") as! String
}
Serialize
Swift
func encode(with aCoder: NSCoder) {
aCoder.encode(self.name, forKey: "name")
aCoder.encode(self.hoge, forKey: "hoge")
aCoder.encode(self.fuga, forKey: "fuga")
}