UserDefaults 中的 object(forKey:) 和 value(forKey:) 有什么区别?

What is the difference between object(forKey:) and value(forKey:) in UserDefaults?

我已经使用 let userDefaults = UserDefaults.standard 设置了一些用户默认值,当我检索它们时,我可以使用以下任何一个:

jobTextField.text = userDefaults.object(forKey: "job") as? String

或者我可以使用

jobTextField.text = userDefaults.value(forKey: "job") as? String

在什么情况下这会有所不同?很高兴知道我什么时候不能使用其中之一。

非常感谢:)

value(forKey:) 来自 key-value coding,而不是 UserDefaults.

的直接方法

切勿在 UserDefaultsDictionary 或任何其他 class 上使用 value(forKey:),除非您清楚地了解需要使用键值编码来获得所需的结果.

当你没有这样的需求时,使用问题class提供的标准访问方式(如UserDefaults object(forKey:).

1。 value(forKey:)

两者完全不同。 value(forKey:) 不是 UserDefaults-only 方法。它由 NSKeyValueCoding 启用,根据 Apple 的文档:

NSKeyValueCoding is an informal protocol that objects adopt to provide indirect access to their properties. When an object is key-value coding compliant, its properties are addressable via string parameters through a concise, uniform messaging interface.

碰巧 UserDefaultsNSKeyValueCoding 兼容的,所以人们已经开始(不一定以正确的方式)使用它来访问 UserDefaults


2。 object(forKey:)

这是访问 UserDefaults 属性的正确方法。除非你没有很好的理由使用 value(forKey:),否则请始终使用 object(forKey:)UserDefaults 的其他有效方法(即 string(forKey:))。


希望这能解决问题!