Skip to content

Instantly share code, notes, and snippets.

@ducito
Last active March 12, 2018 06:46
Show Gist options
  • Save ducito/54bb77993afb1ff08585bb7ccd0d0ea7 to your computer and use it in GitHub Desktop.
Save ducito/54bb77993afb1ff08585bb7ccd0d0ea7 to your computer and use it in GitHub Desktop.
Store and retrieve an object in UserDefaults
import Foundation
struct MyStruct: Codable {
let name: String
let isActive: Bool
}
extension UserDefaults {
private struct Keys {
static let awesomeObject = "awesomeObject"
static let awesomeArray = "awesomeArray"
}
class var awesomeObject: MyStruct? {
get {
guard let data = standard.value(forKey: Keys.awesomeObject) as? Data,
let object = try? JSONDecoder().decode(MyStruct.self, from: data) as MyStruct else { return nil }
return object
}
set {
if let encoded = try? JSONEncoder().encode(newValue) {
UserDefaults.standard.set(encoded, forKey: Keys.awesomeObject)
}
}
}
class var awesomeArray: [MyStruct] {
get {
guard let data = standard.value(forKey: Keys.awesomeArray) as? Data,
let array = try? JSONDecoder().decode(Array.self, from: data) as [MyStruct] else { return [] }
return array
}
set {
if let encoded = try? JSONEncoder().encode(newValue) {
UserDefaults.standard.set(encoded, forKey: Keys.awesomeArray)
}
}
}
}
// Usage
let xxx = MyStruct(name: "XXX", isActive: true)
let yyy = MyStruct(name: "YYY", isActive: false)
UserDefaults.awesomeObject = xxx
dump(UserDefaults.awesomeObject)
let myArray = [xxx, yyy]
UserDefaults.awesomeArray = myArray
dump(UserDefaults.awesomeArray)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment