如何在swift中自动清除NSUserDefault值?

B.S*_*mar 21 nsuserdefaults swift swift2

如何nsuserdefault在swift中自动清除值?我已经尝试了这个,但它对我不起作用......

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
Run Code Online (Sandbox Code Playgroud)

Ram*_*Vel 69

你的Objective-c代码的快速对应就是这个

 let appDomain = NSBundle.mainBundle().bundleIdentifier!

 NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)
Run Code Online (Sandbox Code Playgroud)


Leo*_*bus 37

检查已存储的密钥数量

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
Run Code Online (Sandbox Code Playgroud)

只添加另一个键

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
Run Code Online (Sandbox Code Playgroud)

检查已经存储了多少个键(+2)

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
Run Code Online (Sandbox Code Playgroud)

现在创建一个循环来删除键的对象

for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
    NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
}
Run Code Online (Sandbox Code Playgroud)

检查你有多少把钥匙

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
Run Code Online (Sandbox Code Playgroud)

更新:Xcode 7.2.1•Swift 2.1.1(注意NSUserDefaults不再适用于游乐场,因此需要在实际项目中进行测试)

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)

for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
    NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
}

print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
Run Code Online (Sandbox Code Playgroud)


Sou*_*rma 7

Swift 3.0解决方案

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain) 
Run Code Online (Sandbox Code Playgroud)


小智 6

defaults.setObject(nil, forKey: "userEmail")
Run Code Online (Sandbox Code Playgroud)

这样做,你没有,所以你清楚

  • 这确实有效,但有一个名为removeObjectForKey的方法 (3认同)