KVC
简介:它允许开发者使用键(Key)来间接地访问对象的属性,而不需要直接调用特定的存取方法。
特点:
使用键访问属性:KVC 允许通过键(字符串)来获取和设置对象的属性值,即使这些属性是私有的。这在访问和修改对象属性时提供了一种简洁的方式。
键路径(Key Path):除了单个键外,KVC 还支持键路径,即由多个键组成的路径,用于访问嵌套对象的属性。比如,可以通过键路径 person.address.city 访问嵌套在 person 对象中的 address 对象的 city 属性。
集合操作:KVC 支持对集合(如数组和字典)进行操作,比如通过键值访问数组中的元素,或者动态地向数组中添加、删除元素。
可用于 NSObject 子类:KVC 可以应用于继承自 NSObject 的类,但在 Swift 中也可以应用于符合 NSObjectProtocol 协议的非 NSObject 类型。
基本操作:
获取属性值:使用 value(forKey:) 方法通过键获取属性值。
设置属性值:使用 setValue(_:forKey:) 方法通过键设置属性值。
键路径访问:通过键路径访问嵌套对象的属性。
集合操作:对于数组,可以使用 value(forKeyPath:) 方法获取数组中指定键的所有元素组成的新数组。对于字典,可以使用 value(forKey:) 获取指定键的值。
示例:
class Person: NSObject {
@objc var name: String
@objc var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(name: "Alice", age: 30)
// 使用KVC获取属性值
let personName = person.value(forKey: "name") as? String
print("Person's name is \(personName ?? "Unknown")")
// 使用KVC设置属性值
person.setValue("Bob", forKey: "name")
print("Person's new name is \(person.name)")