一、KVC键值转换设计模式
注:KVC键值转换设计模式是一种更加灵活的访问对象属性的方法,该模式有三种实现方法。
#import "ViewController.h"
#import "Person.h"
#import "YZBCard.h"
@interfaceViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
id p = [[Personalloc]init];
//普通的赋值方法,这种是在Person * p = [[Person alloc]init];定义的时候
// p.name = @"张三";
//p.age = 23;
//第一种:键值的赋值方法,这种是在id p = [[Person alloc]init];
[p setValue:@"张三"forKey:@"name"];
[p setValue:@23forKey:@"age"];
NSLog(@"%@", [pvalueForKey:@"name"]);
//第二种:使用字典的形式
// NSDictionary * dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"李四", @"name", @21, @"age", nil];
// [p setValuesForKeysWithDictionary:dic];
//NSLog(@"%@", p);
//第三种:使用路径的方式,其中的 card,其实是另外一个YZBCard对象类,之后在Person中定义。
YZBCard * card =[[YZBCardalloc]init];
NSDictionary * dic = [[NSDictionaryalloc]initWithObjectsAndKeys:@"李四",@"name", @21,@"age", card, @"card",nil];
[p setValuesForKeysWithDictionary:dic];
[p setValue:@1234forKeyPath:@"card.number"];
NSLog(@"%@", p);
}
#import <Foundation/Foundation.h>
#import "YZBCard.h"
@interface Person : NSObject
@property(strong,nonatomic)NSString * name;
@property(assign,nonatomic)int age;
@property(strong,nonatomic) YZBCard * card;
@end
#import "Person.h"
@implementation Person
- (NSString *)description
{
return [NSStringstringWithFormat:@"姓名 = %@,年龄 = %d, card =%@",self.name,self.age,self.card.number];
}
@end
@interface YZBCard : NSObject
@property (strong,nonatomic)NSNumber * number;
@end