KVC(Key-value coding)键值编码,从字面意思来看,就是可以通过对象的key名进行访问,达到存取值的目的,这里的key名包含属性名、公有成员变量、私有成员变量和对象属性的属性。可以在运行时动态的修改属性的值,特别是当我们使用第三方库,但是对方又没有将我们想要修改的属性暴露出来时,使用KVC来实现就比较简单了。下面我们一起来看一下KVC的基本使用。
在Object-C和Swift中,KVC都是通过NSObject的扩展来实现,也就是说所有继承自NSObject的实例对象都可以使用KVC。首先看我们最常用的赋值、取值API:
- (void)setValue:(nullableid)valueforKey:(NSString*)key; //赋值操作,通过key名直接赋值
-(nullable id)valueForKey:(NSString*)key; //取值操作,对应上面的赋值
-(void)setValue:(nullable id)value forKeyPath:(NSString*)keyPath;//赋值操作,通过KeyPath来设值,形式类似a.b.c
-(nullable id)valueForKeyPath:(NSString*)keyPath; //取值操作,对应setValueForKeyPath。
下面我们来看一个简单地例子:
然后我们分别使用上面介绍的四个API来进行赋值和取值操作:
结果如下:
很明显,我们使用KVC分别对属性、私有成员变量、公共成员变量和对象的属性进行赋值,并取出,形成闭环。这就是KVC的基本使用情况。
细心的朋友可能已经发现,我们生命的成员变量是_height和_weight,但是我们在进行赋值操作时,key名为“height”和“weight”,也能赋值成功,这是为什么呢?下篇文章我们仔细分析KVC的内部实现逻辑。
网友评论