Last active
March 12, 2018 06:46
-
-
Save ducito/54bb77993afb1ff08585bb7ccd0d0ea7 to your computer and use it in GitHub Desktop.
Store and retrieve an object in UserDefaults
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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