首页 > 解决方案 > 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)
}

我应该怎么办??

标签: swiftswiftyuserdefaults

解决方案


您上面的代码似乎工作正常。您正在将一个空字符串设置为“ident”的值,然后根据您得到的问题对其进行检查

Optional("")

可选中的值是正确的(又名空字符串“”)。你得到一个可选项的原因是因为 stringForKey 的返回值可能是 nil,因此它返回一个可选项。

我通常不建议强制展开,但如果你只是在上面设置了几行,而你想要的只是打印它,你可以这样做:

print(userDefaults.string(forKey: "ident")!)

它将完全按照您在函数的第一行中设置的那样打印空字符串“”。

最后,您最好使用 removeObject(forKey:) 删除该值,而不是将其设置为空字符串。它们是不同的东西,我相信你试图表示那里什么都没有,而不是一个实际上是一个值的空字符串。


推荐阅读