iOS的KVC编程示例

看了传智播客视频简单总结一下:

首先是一个Dog对象:

#import <Foundation/Foundation.h>

@interface Dog : NSObject

@property (nonatomic,copy) NSString *name;

@end

然后是一个Person对象:

#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject

@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int age;
@property (nonatomic,copy) NSString *email;
@property (nonatomic,strong) Dog *dog;
@end

然后是main.m的测试代码:

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //直接为对象属性赋值
        Person *p1 = [[Person alloc]init];
        p1.name = @"Jordan";
        Dog *d1 = [[Dog alloc]init];
        d1.name = @"哈士奇";
        p1.dog = d1;
        NSLog(@"%@-------%@",p1.name,p1.dog);
        
        //通过kvc的方式为对象赋值
        
        [p1 setValue:@"James" forKeyPath:@"name"];
        [p1 setValue:@10 forKeyPath:@"age"];
        d1.name = @"金毛";
        [p1 setValue:d1 forKeyPath:@"dog"];
        
        //这就是keyPath,如果用setValue forKey 是不能使用keyPath的。
        [p1 setValue:@"哮天犬" forKeyPath:@"dog.name"];
        NSString *dogName = [p1 valueForKeyPath:@"dog.name"];
        
        //同样,valueForKey是无法使用keyPath的
        //dogName = [p1 valueForKey:@"dog.name"];
        NSString *name = [p1 valueForKeyPath:@"name"];
        NSLog(@"%@*****%@",dogName,name);
        
        NSLog(@"%@-----%d-----%@",p1.name,p1.age,p1.dog.name);
        
        
        NSString *value = @"yahuo.com";
        NSString *property = @"email";
        [p1 setValue:value forKeyPath:property];
        NSLog(@"%@",p1.email);
        
        Person *p2 = [[Person alloc]init];
        NSDictionary *dic = @{
                              @"name":@"Alian",
                              @"age":@23,
                              @"email":@"abc@qq.com",
                              @"dog":@{@"name":@"muyangquan"}
                              };
        
        [p2 setValuesForKeysWithDictionary:dic];
        NSDictionary *dogDic = (NSDictionary*)p2.dog;
        NSLog(@"%@---%d---%@---%@",p2.name,p2.age,p2.email,dogDic[@"name"]);

        //对象转换为字典
        NSDictionary *d = [p2 dictionaryWithValuesForKeys:@[@"name",@"age",@"dog"]];
        NSLog(@"%@---%@---%@",d[@"name"],d[@"dog"],d[@"age"]);
        
        
        
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值