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

MEn*_*bah 3 nsuserdefaults swift

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

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

或者我可以使用

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

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

非常感谢 :)

rma*_*ddy 12

value(forKey:)来自键值编码,而不是直接的方法UserDefaults.

除非您明确需要使用键值编码来获得所需结果,否则切勿使用value(forKey:)on UserDefaultsDictionary任何其他类.

如果您没有这种需求,请使用相关类提供的标准访问方法(例如UserDefaults object(forKey:).


Mr.*_*der 7

1. value(forKey:)

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

NSKeyValueCoding是一种非正式的协议,对象采用它来提供对其属性的间接访问.当对象符合键值编码时,其属性可通过字符串参数通过简洁,统一的消息传递接口寻址.

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


2. object(forKey:)

这是访问UserDefaults属性的正确方法.除非你没有充分的理由使用value(forKey:),总是使用object(forKey:),或UserDefaults(即string(forKey:))的其他有效方法.


希望这能搞定!