看了传智播客视频简单总结一下:
首先是一个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;
}