Skip to content

Instantly share code, notes, and snippets.

@foxicode
Created March 3, 2020 18:09
Show Gist options
  • Save foxicode/612f2160b3325de97cdd22fd1c4caf9d to your computer and use it in GitHub Desktop.
Save foxicode/612f2160b3325de97cdd22fd1c4caf9d to your computer and use it in GitHub Desktop.
Swift extensions to load and save data
import Foundation
extension Int {
init?(key: String) {
guard UserDefaults.standard.value(forKey: key) != nil else { return nil }
self.init(UserDefaults.standard.integer(forKey: key))
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension Bool {
init?(key: String) {
guard UserDefaults.standard.value(forKey: key) != nil else { return nil }
self.init(UserDefaults.standard.bool(forKey: key))
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension Float {
init?(key: String) {
guard UserDefaults.standard.value(forKey: key) != nil else { return nil }
self.init(UserDefaults.standard.float(forKey: key))
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension Double {
init?(key: String) {
guard UserDefaults.standard.value(forKey: key) != nil else { return nil }
self.init(UserDefaults.standard.double(forKey: key))
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension Data {
init?(key: String) {
guard let data = UserDefaults.standard.data(forKey: key) else { return nil }
self.init(data)
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension String {
init?(key: String) {
guard let str = UserDefaults.standard.string(forKey: key) else { return nil }
self.init(str)
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension Array where Element == Any {
init?(key: String) {
guard let array = UserDefaults.standard.array(forKey: key) else { return nil }
self.init()
self.append(contentsOf: array)
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
extension Dictionary where Key == String, Value == Any {
mutating func merge(dict: [Key: Value]) {
for (k, v) in dict {
updateValue(v, forKey: k)
}
}
init?(key: String) {
guard let dict = UserDefaults.standard.dictionary(forKey: key) else { return nil }
self.init()
self.merge(dict: dict)
}
func store(key: String) {
UserDefaults.standard.set(self, forKey: key)
UserDefaults.standard.synchronize()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment