Skip to content

Instantly share code, notes, and snippets.

@jeremiegirault
Created May 2, 2016 09:51
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeremiegirault/d4710116e19ec86974550960ba52554a to your computer and use it in GitHub Desktop.
Save jeremiegirault/d4710116e19ec86974550960ba52554a to your computer and use it in GitHub Desktop.
import Foundation
protocol Settings {
subscript(key: String) -> AnyObject? { get nonmutating set }
}
struct Defaults: Settings {
typealias Set = (String, AnyObject?) -> Void
typealias Get = (String) -> AnyObject?
let set: Set
let get: Get
subscript(key: String) -> AnyObject? {
get { return get(key) }
nonmutating set { set(key, newValue) }
}
}
let standardUserDefaults = Defaults(
set: { key, value in NSUserDefaults.standardUserDefaults().setObject(value, forKey: key) },
get: { NSUserDefaults.standardUserDefaults().objectForKey($0) })
standardUserDefaults["x"] = "y"
extension NSUserDefaults: Settings {
subscript(key: String) -> AnyObject? {
get { return objectForKey(key) }
set { setObject(newValue, forKey: key) }
}
}
let settingsRef: Settings = NSUserDefaults.standardUserDefaults()
print(settingsRef["myProp"])
settingsRef["myProp"] = "someValue"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment