swift - UserDefaults.standard.set() 不起作用
问题描述
我有一个重置函数,它为每个键设置一个空字符串,UserDefaults.standard
但它实际上并没有重置它们,有时它有效,有时它没有,奇怪的是有时它只重置几个值。
没有什么可以设置以前的值,因为一旦值被重置,重置功能就会退出应用程序。
@IBAction func reset(_ sender: Any) {
//(userDefaults = UserDefaults.standard)
userDefaults.set("", forKey: "ident")
userDefaults.set("", forKey: "usr")
userDefaults.set("", forKey: "psw")
userDefaults.set("", forKey: "token")
userDefaults.set("", forKey: "release")
userDefaults.set("", forKey: "expire")
userDefaults.set("", forKey: "name")
userDefaults.set("", forKey: "surname")
userDefaults.set("", forKey: "ident_req")
print(userDefaults.string(forKey: "ident")) //output: Optional("")
exit(1)
}
我应该怎么办??
解决方案
您上面的代码似乎工作正常。您正在将一个空字符串设置为“ident”的值,然后根据您得到的问题对其进行检查
Optional("")
可选中的值是正确的(又名空字符串“”)。你得到一个可选项的原因是因为 stringForKey 的返回值可能是 nil,因此它返回一个可选项。
我通常不建议强制展开,但如果你只是在上面设置了几行,而你想要的只是打印它,你可以这样做:
print(userDefaults.string(forKey: "ident")!)
它将完全按照您在函数的第一行中设置的那样打印空字符串“”。
最后,您最好使用 removeObject(forKey:) 删除该值,而不是将其设置为空字符串。它们是不同的东西,我相信你试图表示那里什么都没有,而不是一个实际上是一个值的空字符串。
推荐阅读
- python - 为什么 sqlalchemy 似乎自发地提交某些查询而忽略其他查询?
- react-native - React Native 测试 android 和 ios 组件
- java - 关于覆盖类(数据类或 POJO)中的 toString() 方法和调用 list.toString() 的困惑?
- amazon-cognito - AWS Cognito 身份池创建的默认角色
- c# - '不能启用此约束,因为并非所有值都有对应的父值。'
- python - 正则表达式组不包括 az 但不包括 c
- nestjs - 我可以使用@nestjs/cofnig 从 appModule 中的数据库获取配置吗?
- laravel - Laravel Pluck 来自“与关系”
- javascript - 在 IndexedDB 中运行并行写入事务是否更快?
- python-3.x - 排列python列表中的所有值