let defaults = UserDefaults.standard
defaults.set(25, forKey: "Age")
defaults.set(true, forKey: "UseTouchID")
defaults.set(CGFloat.pi, forKey: "Pi")
[ ] How to save custom class to UserDefaults
class Person: NSObject, NSCoding {
var name: String
var image: String
init(name: String, image: String){
self.name = name
self.image = image
}
// When loading
required init?(coder: NSCoder) {
name = coder.decodeObject(forKey: "name") as? String ?? ""
image = coder.decodeObject(forKey: "image") as? String ?? ""
}
// When saving
func encode(with coder: NSCoder) {
coder.encode(name, forKey: "name")
coder.encode(image, forKey: "image")
}
}
func save(){
if let savedData = try? NSKeyedArchiver.archivedData(withRootObject: people, requiringSecureCoding: false){
UserDefaults.standard.set(savedData, forKey: "people")
}
}
if let savedPeople = UserDefaults.standard.object(forKey: "people") as? Data{
if let decodedPoeple = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(savedPeople) as? [Person]{
people = decodedPoeple
}
}
[ ] Get type from UserDefaults
let shouldDo = defaults.bool(forKey: "ShouldDo")
let complexType = defaults.object(forKey: "UnknownObject")
let myTable = defaults.object(forKey: "MyTable") as? [String: String] ?? [String: String]()