Apple键值编码KVC
Apple键值编码KVC

Apple键值编码KVC

KVC,全称是 Key-Value Coding(键值编码),是 Apple 在 Objective-C 和 Swift 中引入的一种间接访问对象属性的机制。它允许使用字符串(key)来 动态访问或修改对象的属性。

基础用法

KVC 允许这样操作:

object.setValue("张三", forKey: "name")
let value = object.value(forKey: "name")

这相当于:

object.name = "张三"
let value = object.name

但 KVC 的优势在于:不需要在编译时知道这个属性,只要运行时能用字符串访问即可。

Swift 中的 KVC 使用要求

1、类必须继承自 NSObject。

2、被访问的属性必须是 @objc 修饰 的(或者是自动桥接到 Objective-C 的类型)。

import Foundation

class Person: NSObject {
    @objc var name: String = ""
    @objc var age: Int = 0
}

let person = Person()
person.setValue("李四", forKey: "name")
person.setValue(30, forKey: "age")

print(person.name)  // 输出:李四
print(person.value(forKey: "age")!)  // 输出:30

Swift 中的 KVC 常见用途

1、绕过只读属性限制(比如 isExpanded)

例如 NSSavePanel.isExpanded,不能直接赋值,但可以通过 KVC 修改:

panel.setValue(true, forKey: "isExpanded")

2、动态属性访问

例如用于配置数据模型、UI绑定等,不必写死访问路径。

KVC 的风险

使用字符串访问属性,拼写错误不会报错,容易出错。

如果 key 不存在,会引发运行时错误。

对私有属性使用 KVC,可能会违反封装原则或造成不稳定。

KVC 与 SwiftUI 的区别

KVC 是 Foundation / AppKit / UIKit 中的技术,不直接用于 SwiftUI 的数据绑定。SwiftUI 使用的是 @State、@Binding、@ObservedObject 等“声明式”绑定。

总结

KVC 是一种强大的“反射式”技术,可以用字符串动态访问和修改对象属性,适合处理 UI 控件、模型类和一些绕过系统限制的场景。

此外, KVC还有对应的“配套技术” ——KVO(Key-Value Observing),用于监听属性变化。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注