全称:Key-value observing
用法:
![]()
@interface Book : NSObject
@property (nonatomic, strong) NSString *bookName;
@end
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, strong) Book *book;
@end
类
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Book.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc]init];
//类
[p setValue:@"张三" forKey:@"name"];
[p setValue:@"20" forKeyPath:@"age"];
Book *book = [[Book alloc]init];
p.book = book;
[p setValue:@"算法导论" forKeyPath:@"book.bookName"];
NSLog(@"%@, %@ , bookName: %@",p.name,[p valueForKey:@"age"],p.book.bookName);
//字典
book.bookName = @"数据结构";
NSDictionary *dict = @{@"name":@"李四",@"age":@"40",@"book":book};
[p setValuesForKeysWithDictionary:dict];
NSLog(@"%@, %@ , bookName: %@",p.name,[p valueForKey:@"age"],p.book.bookName);
//数组
Person *p2 = [[Person alloc] init];
p2.name = @"yellow Mokey";
Person *p3 = [[Person alloc] init];
p3.name = @"red dog";
Person *p4 = [[Person alloc] init];
p4.name = @"green chicken";
NSArray *array = @[p2,p3,p4];
// 把三个对象中的name 取出来
NSArray *nameArray = [array valueForKeyPath:@"name"];
NSLog(@"%@",nameArray);
}
return 0;
}