从字符串到字符串条件铸总是成功的SWIFT 3
问题描述:
func resetUserDefaults() {
let userDefaults = UserDefaults.standard
let dict = userDefaults.dictionaryRepresentation()
for (key,_) in dict {
if let key = key as? String {
userDefaults.removeObject(forKey: key)
} else {
#if DEBUG
NSLog("\(key)")
#endif
}
}
}
我得到这个警告。任何人都可以建议我如何避免这种变异
答
没有必要将某些东西转换为已知(编译器)所具有的类型。
只是删除整个条件,并直接使用您的key
。
答
UserDefaults
中的所有密钥必须是String
类型。所以key
被宣布为String
。所以试图将它投射到String
是毫无意义的。因此警告。
所有你需要的是:
func resetUserDefaults() {
let userDefaults = UserDefaults.standard
let dict = userDefaults.dictionaryRepresentation()
for (key,_) in dict {
userDefaults.removeObject(forKey: key)
}
}
答
它会始终显示华林因为dictionaryRepresentation()的返回[字符串:任何]。
所以,当你从字符串转换为字符串时,它肯定会显示警告。 欲了解更多信息 - >https://developer.apple.com/documentation/foundation/userdefaults/1415919-dictionaryrepresentation
答
由于UserDefault中的键应该是String类型的键,因此将键转换为字符串是没有用的,因此您会收到此警告。
func resetUserDefaults() {
let userDefaults = UserDefaults.standard
let dict = userDefaults.dictionaryRepresentation()
for (key, _) in dict {
userDefaults.removeObject(forKey: key)
}
}
只需删除?来自该行的字符串。 –
字典键是非可选的,'UserDefaults'中的所有键必须是定义的字符串,它们不能是'nil'。删除整个if let表达式。 – vadian
@vadian这不是关键是可选的,它是'key'已知是一个'String'。 – rmaddy