KVC键值对

//Key Value Coding(简称:KVC)中文含义:键值编码

//KVC利用字符串动态控制一个对象,操作方法由NSValueCoding协议提供,在NSObject中实现了该协议,所以在所有继承自NSObject中所有的对象都支持KVC操作

//常用属性有:

//1、动态设置

//setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>用于简单路径(直接可以找到类的)

//setValue:<#(nullable id)#> forKeyPath:<#(nonnull NSString *)#>用于复合路径(类中包含类)

//2、动态读取

//valueForKey:<#(nonnull NSString *)#>

//valueForKeyPath:<#(nonnull NSString *)#>

//PS:参数说明:KEY值就是属性的名称

//KVC进行读取的查找规则:(查找过程中无论属性或方法是公有的还是私有的都是能正确读设)

//1、首先查找get/set方法(不存在进行下面的查找)

//2”_”查找带下划线的实例变量(不存在进行下面的查找)

//3、直接查找不带下划线的实例变量(最后还是没有找到,进行下面的杀手锏)

//4、设置会调用:setValue:forUndefinedKey:

//or

//读取或调用:valueforUndefinedKey:


Demo:

Account类只是为了点明符合路径的使用

Account.h

#import <Foundation/Foundation.h>


@interface Account : NSObject


#pragma mark-属性


#pragma mark-余额


@property (nonatomic,assign)float balance;


@end


Account.m

#import "Account.h"


@implementation Account


@end


Person.h

#import <Foundation/Foundation.h>


@class Account;


@interface Person : NSObject{

    @private int _age;

}


#pragma mark-属性


#pragma mark 姓名


@property (nonatomic,copy)NSString *name;


#pragma mark 账户


@property (nonatomic,strong)Account *account;


#pragma mark-公共方法


#pragma mark 显示人员信息


- (void)showMessage;


@end


Person.m

#import "Person.h"


@implementation Person


#pragma mark - 公共方法


#pragma mark 显示人员信息


- (void)showMessage

{

    NSLog(@"name = %@,age = %d",_name,_age);

}


@end


KVC验证

Person *person1 = [[Personalloc] init];

    

    [person1 setValue:@"why"forKey:@"name"];

    

    [person1 setValue:@22forKey:@"age"];

    

    [person1 showMessage];

    

    NSLog(@"person1姓名:%@,年龄:%@",person1.name,[person1valueForKey:@"age"]);

    

    Account *account1 = [Accountnew];

    

    person1.account = account1;

    

    [person1 setValue:@100000000.0forKeyPath:@"account.balance"];

    

    NSLog(@"person1存款余额:%.2f",[[person1valueForKeyPath:@"account.balance"]floatValue]);



//使用KVC数组计算,无需循环


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值