我使用let userDefaults = UserDefaults.standard
设置了一些用户默认值,当我检索它们时,我可以使用以下任何一个:
jobTextField.text = userDefaults.object(forKey: "job") as? String
或者我可以使用
jobTextField.text = userDefaults.value(forKey: "job") as? String
在什么情况下这会有所不同?很高兴知道我什么时候不能使用其中一个。
非常感谢:)
答案 0 :(得分:11)
value(forKey:)
来自key-value coding,而不是UserDefaults
的直接方法。
切勿在{{1}}或value(forKey:)
或任何其他类别上使用UserDefaults
,除非您明确了解需要使用键值编码来获得所需的结果。
如果您没有这种需求,请使用相关课程提供的标准访问方法(例如Dictionary
。
答案 1 :(得分:6)
value(forKey:)
两者完全不同。 value(forKey:)
不是UserDefaults-only
方法。它由NSKeyValueCoding
启用,根据Apple的文档:
NSKeyValueCoding
是一种非正式协议,对象采用该协议提供间接访问 他们的财产。当对象符合键值编码时,其属性可通过字符串参数通过简洁,统一的消息传递接口寻址。
恰好UserDefaults
符合NSKeyValueCoding
,因此人们已经开始(不一定以正确的方式)使用它来访问UserDefaults
。
object(forKey:)
这是访问UserDefaults
属性的正确方法。除非您没有充分的理由使用value(forKey:)
,否则请始终使用object(forKey:)
或UserDefaults
的其他有效方法(即string(forKey:)
)。
希望这可以解决问题!