Skip to content

Instantly share code, notes, and snippets.

@benjaminsnorris
Created January 27, 2016 17:40
Show Gist options
  • Save benjaminsnorris/297ca63ae1165f77d8fd to your computer and use it in GitHub Desktop.
Save benjaminsnorris/297ca63ae1165f77d8fd to your computer and use it in GitHub Desktop.
Preferences "wrapper" around NSUserDefaults
protocol Preferences: class {
var showNames: Bool { get set }
func registerDefaults(registrar: Preferences -> Void)
}
private class DefaultPreferenceValues: Preferences {
var showNames = false
func registerDefaults(registrar: Preferences -> Void) {
fatalError("The registrar cannot register defaults")
}
}
extension NSUserDefaults: Preferences {
var showNames: Bool {
get { return boolForKey("showNames") }
set { setBool(newValue, forKey: "showNames") }
}
func registerDefaults(registrar: Preferences -> Void) {
let defaultValues = DefaultPreferenceValues()
registrar(defaultValues)
var defaultsToRegister = Dictionary<String, AnyObject>()
let m = Mirror(reflecting: defaultValues)
for (key, value) in m.children {
if let key = key, let value = value as? AnyObject {
defaultsToRegister[key] = value
}
}
registerDefaults(defaultsToRegister)
}
}
preferences = NSUserDefaults.standardUserDefaults()
preferences.registerDefaults {
$0.showNames = true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment