只是想在这里格外小心......
如果我有一个应用程序在 UserDefaults 中保存了一个值,就像在 Objective-C 中这样:
NSString *newString = textField.text;
[[NSUserDefaults standardUserDefaults] setObject: newString forKey:@"textKey"];
当我发布对现在用 Swift 编码的应用程序的更新时,这是否是检查此值是否存在的正确方法:
if (UserDefaults.standard.object(forKey: "textKey") as? String) != nil {
print("There is a string")
} else {
print("No string exists")
}
我尝试使用 .string(forKey:) 和 .bool(forKey:) 因为它们已经被引入,但是它是最安全的因为它被保存为一个对象将它作为一个对象拉出来然后用“作为?字符串”?
同一个问题的棘手版本:
NSDictionary 对象的 NSMutableArray 被保存为 UserDefaults 中的对象
if let oldData = UserDefaults.standard.object(forKey: "theData") as? [NSMutableDictionary] {
}
NSDictionary 和 NSMutableDictionary 在这里可以互换吗?
谢谢!
最佳答案
[NS]UserDefaults
由 plist 和字典支持。 Objective-C 字符串作为 <string>Some Text</string>
保存到 plist 中.
在 Swift 中加载的同一个 plist 为该键提供了一个字符串。
所以你应该没有问题使用 UserDefaults.string
读取使用 Objective-C 存储的值。当然你还需要验证这个值是否真的存在。
if let str = UserDefaults.standard.string(forKey: "textKey") {
print("Found \(str)")
} else {
print("No string for key")
}
即使原始值不是字符串,使用 UserDefault.string
是安全的。它只会返回 nil
对于非字符串值。
关于NSDictionary
和 NSMutableDictionary
, 请注意 UserDefaults
只检索不可变的 NSDictionary
.你无法阅读 NSMutableDictionary
(或数组)来自 UserDefaults
.
请注意,您可以安全地使用 Swift 字典来阅读原文 NSDictionary
.无需使用 Objective-C 类。
关于objective-c - Objective-C 和 Swift 之间的 UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44171504/