如何defaults.removeObjectForKey(“”)适当的迅速

我有以下几点:

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() let phone = defaults.objectForKey("phone") as String println(phone) defaults.removeObjectForKey("phone") println("phone2\(phone)") 

打印显示相同的结果,尽pipe试图未设置,结果如“5”或“6”。

您正在打印可变phoneremoveObjectForKey不会更新可变phone 。 所以,你必须从NSUserdefaults获得更新的值,

 let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() defaults.setObject("Hello", forKey: "phone") let phone = defaults.objectForKey("phone") as String // This will save your value in `phone` // Do not synchronize after removing the key, if you want 'value' for your key 'phone' after your application terminated defaults.synchronize() println(phone) defaults.removeObjectForKey("phone") // Get the updated value, let updatedPhone = defaults.objectForKey("phone") as String? // This will save nil in your `phone` key, make sure that what you want defaults.synchronize() println("phone2\(updatedPhone)") 

像@Lyndshey说的,你不必Synchronize ,因为它会定期自动发生。 但是,如果你不能等待它,你的应用程序将退出,你可以Synchronize ,但真的这是性能问题。

请检查Apple文档 ,并检查此Stackoverflow答案

答案很简单。 您正在打印先前分配的phonevariables。 你需要再次检索NSUserDefaults的值来检查它是否存在。

 let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() var phone = defaults.objectForKey("phone") as String println(phone) defaults.removeObjectForKey("phone") if let phone = defaults.objectForKey("phone") as? String { println("phone2\(phone)") } else { println("Value is nil") }