Created
May 14, 2016 08:16
-
-
Save to4iki/4323b793068f8a8ae776b3822aebc74f to your computer and use it in GitHub Desktop.
Swift NSUserDefaults InMemory for Testing
This file contains 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 | |
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