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

时间:2017-02-26 18:18:37

标签: swift nsuserdefaults

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

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

或者我可以使用

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

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

非常感谢:)

2 个答案:

答案 0 :(得分:11)

value(forKey:)来自key-value coding,而不是UserDefaults的直接方法。

切勿在{{1​​}}或value(forKey:)或任何其他类别上使用UserDefaults,除非您明确了解需要使用键值编码来获得所需的结果。

如果您没有这种需求,请使用相关课程提供的标准访问方法(例如Dictionary

答案 1 :(得分:6)

1。 value(forKey:)

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

  

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

恰好UserDefaults符合NSKeyValueCoding,因此人们已经开始(不一定以正确的方式)使用它来访问UserDefaults

2。 object(forKey:)

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

希望这可以解决问题!