Swift中的CKRecord
类规范说使用setObject:forKey:
来设置CKRecord
的值。但我看到很多代码示例setValue:forKey:
是NSValueCoding
协议的一部分。那么有人可以解释一个优于另一个的优势吗?
答案 0 :(得分:2)
不幸的是setValue:
非常经常被滥用。
简易规则:
为键/值集合类型中的键设置对象的指定方法是setObject:
或密钥订阅。
setValue:
是一种具有特殊含义的键值编码方法。例如,您可以使用单行同时在数组中设置所有词典(或自定义对象)的相同属性。 setValue:
也可用于通过文字键设置自定义类中的属性,而不是使用适当的setter。
例如语法
object.name = "foo"
和
object.setValue("foo", forKey:"name")
基本相同。
使用setValue:
的一个例外是NSManagedObject
,因为此类严重依赖于键值编码。
修改强>
摘要(rmaddy的优秀评论的字面引用,谢谢):
只有在明确,特定需要使用键值编码时才使用setValue:forKey:
。