Swift 中CKRecord
类规范说使用 setObject:forKey:
来设置CKRecord
的值。但是我看到很多代码示例setValue:forKey:
这是NSValueCoding
协议的一部分。那么有人可以解释一下一个比另一个的优势是什么吗?
不幸的是,setValue:
经常被误用。
简单规则:
为键/值集合类型中的键设置对象的指定方法是setObject:
或键订阅。
setValue:
是一种具有特殊含义的键值编码方法。例如,您可以使用一行同时设置数组中所有字典(或自定义对象)的相同属性。 setValue:
还可用于通过文本键(而不是使用适当的 setter)在自定义类中设置属性。
例如语法
object.name = "foo"
和
object.setValue("foo", forKey:"name")
做基本一样。
使用 setValue:
的例外之一是NSManagedObject
,因为此类严重依赖于键值编码。
编辑:
总结(从字面上引用了rmaddy的优秀评论,谢谢):
仅当您明确、具体需要使用键值编码时才使用setValue:forKey:
。