CKRecord setValue:forKey或setObject:forKey

时间:2016-06-05 15:44:04

标签: swift cloudkit ckrecord

Swift中的CKRecord类规范说使用setObject:forKey:来设置CKRecord的值。但我看到很多代码示例setValue:forKey:NSValueCoding协议的一部分。那么有人可以解释一个优于另一个的优势吗?

1 个答案:

答案 0 :(得分:2)

不幸的是setValue: 非常经常被滥用。

简易规则:

为键/值集合类型中的键设置对象的指定方法是setObject:或密钥订阅。

setValue:是一种具有特殊含义的键值编码方法。例如,您可以使用单行同时在数组中设置所有词典(或自定义对象)的相同属性。 setValue:也可用于通过文字键设置自定义类中的属性,而不是使用适当的setter。

例如语法

object.name = "foo"

object.setValue("foo", forKey:"name")

基本相同。

使用setValue:的一个例外是NSManagedObject,因为此类严重依赖于键值编码。

修改

摘要(rmaddy的优秀评论的字面引用,谢谢):

只有在明确,特定需要使用键值编码时才使用setValue:forKey: