Skip to content

Instantly share code, notes, and snippets.

@to4iki
Created May 14, 2016 08:16
Show Gist options
  • Save to4iki/4323b793068f8a8ae776b3822aebc74f to your computer and use it in GitHub Desktop.
Save to4iki/4323b793068f8a8ae776b3822aebc74f to your computer and use it in GitHub Desktop.
Swift NSUserDefaults InMemory for Testing
import Foundation
final class InMemoryUserDefaults: NSUserDefaults {
static let SuiteName = "InMemory"
private var data: [String: AnyObject?]
override init?(suiteName suitename: String?) {
data = [:]
super.init(suiteName: InMemoryUserDefaults.SuiteName)
}
// MARK: NOP
override func synchronize() -> Bool {
return true
}
// MARK: get
override func objectForKey(defaultName: String) -> AnyObject? {
return data[defaultName] ?? nil
}
override func valueForKey(key: String) -> AnyObject? {
return data[key] ?? nil
}
override func stringForKey(defaultName: String) -> String? {
return data[defaultName] as? String
}
override func arrayForKey(defaultName: String) -> [AnyObject]? {
return data[defaultName] as? [AnyObject]
}
override func dictionaryForKey(defaultName: String) -> [String : AnyObject]? {
return data[defaultName] as? [String : AnyObject]
}
override func dataForKey(defaultName: String) -> NSData? {
return data[defaultName] as? NSData
}
override func stringArrayForKey(defaultName: String) -> [String]? {
return data[defaultName] as? [String]
}
override func integerForKey(defaultName: String) -> Int {
return data[defaultName] as? Int ?? 0
}
override func floatForKey(defaultName: String) -> Float {
return data[defaultName] as? Float ?? 0.0
}
override func doubleForKey(defaultName: String) -> Double {
return data[defaultName] as? Double ?? 0.0
}
override func boolForKey(defaultName: String) -> Bool {
return data[defaultName] as? Bool ?? false
}
override func URLForKey(defaultName: String) -> NSURL? {
return data[defaultName] as? NSURL
}
// MARK: set
override func setObject(value: AnyObject?, forKey defaultName: String) {
data[defaultName] = value
}
override func setValue(value: AnyObject?, forKey key: String) {
data[key] = value
}
override func setInteger(value: Int, forKey defaultName: String) {
data[defaultName] = value
}
override func setDouble(value: Double, forKey defaultName: String) {
data[defaultName] = value
}
override func setFloat(value: Float, forKey defaultName: String) {
data[defaultName] = value
}
override func setBool(value: Bool, forKey defaultName: String) {
data[defaultName] = value
}
override func setURL(url: NSURL?, forKey defaultName: String) {
data[defaultName] = url
}
}
// MARK: - NSUserDefaults
extension NSUserDefaults {
@objc class func transientDefaults() -> InMemoryUserDefaults {
return InMemoryUserDefaults(suiteName: InMemoryUserDefaults.SuiteName)!
}
}
/// execute
class Animal: NSObject { let name: String; init(name: String) { self.name = name } }
let us = InMemoryUserDefaults(suiteName: "InMemory")!
us.setObject(Animal(name: "cat"), forKey: "animal")
us.setBool(true, forKey: "lauch")
print(us.objectForKey("animal")?.name) // Optional("cat")
print(us.boolForKey("lauch")) // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment