objective-c - Objective-C 和 Swift 之间的 UserDefaults

标签 objective-c swift string object userdefaults

只是想在这里格外小心......

如果我有一个应用程序在 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对于非字符串值。

关于NSDictionaryNSMutableDictionary , 请注意 UserDefaults只检索不可变的 NSDictionary .你无法阅读 NSMutableDictionary (或数组)来自 UserDefaults .

请注意,您可以安全地使用 Swift 字典来阅读原文 NSDictionary .无需使用 Objective-C 类。

关于objective-c - Objective-C 和 Swift 之间的 UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44171504/

相关文章:

arrays - 从值字典数组中检索键

Java Unicode 字符转 UTF

c# - 检查字符串是否有单词

ios - performSelectorOnMainThread 等待直到完成 :YES advantage over simple call

ios - 托管对象上下文不是从 App Delegate 传递的

objective-c - 为什么当我进行构建时 Xcode 4 不添加/创建/修改任何构建目录?

objective-c - 通过 Objective-C 将 .csv 文件导入 SQlite

ios - 在闭包外访问时变量的值发生变化

swift - 调整 UICollectionView 标题高度?

python - 计算数据框中字符串的出现次数