如何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”。
您正在打印可变phone
, removeObjectForKey
不会更新可变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答案
答案很简单。 您正在打印先前分配的phone
variables。 你需要再次检索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") }