iOS KVC 简介
- 作者: 最帅的蛆在屎上翻滚
- 来源: 51数据库
- 2021-08-05
//作用-:利用kvc 赋值 (key value coding)键值编码
void test(){
? ? Person *person = [[Person alloc]init];
? ? [person setValue:@"王五" forKey:@"name"];
? ? [person setValue:@"19" forKey:@"money"];
? ? NSLog(@"---%@ ---- %.2f",person.name,person.money);
}
?
//作用二:修改类的私有成员变量(UIpageControl)
void test2(){
? ? Person *person = [[Person alloc]init];
? ? [person printAge];
? ? [person setValue:@"88" forKeyPath:@"_age"];
? ? [person printAge];
}
//作用三:字典转模型
void test3(){
? ? NSDictionary *dict = @{@"name":@"小黄",@"money":@190.88};
? ? Person *person = [Person personWithDict:dict];
? ? NSLog(@"%@",person);
}
//作用四:利用kvc取值
void test4(){
? ? Person *person = [[Person alloc]init];
? ? person.name = @"你好";
? ? NSString *name = [person valueForKey:@"name"];
? ? NSLog(@"%@",name);
}
//作用五:(模型转字典)
void test5(){
? ? Person *person = [[Person alloc]init];
? ? person.name = @"你好";
? ? person.money = 32.32;
? ? NSDictionary * dict = [person dictionaryWithValuesForKeys:@[@"name",@"money"]];
? ? NSLog(@"%@",dict);
}
//作用六: 取出所有模型中的某个属性
void test6(){
? ? //? ? ? ? 取出所有模型中的某个属性
? ? Person *person1 = [[Person alloc]init];
? ? person1.name = @"你好";
? ? person1.money = 92.32;
?? ?
? ? Person *person2 = [[Person alloc]init];
? ? person2.name = @"lisi";
? ? person2.money = 82.32;
??? ? Person *person3 = [[Person alloc]init];
? ? person3.name = @"wangwu";
? ? person3.money = 892.32;
? ? NSArray *allPersons = @[person1,person2,person3];
? ? NSArray *allPesonName = [allPersons valueForKeyPath:@"name"];
? ? NSLog(@"%@",allPesonName);
}
//模型
#import <Foundation/Foundation.h>
#import "Dog.h"
NS_ASSUME_NONNULL_BEGIN
?
@interface Person : NSObject
//{
//? ? int _age;//ios9之前默认私有变量
//}
?
@property (nonatomic, weak) NSString *name;
@property (nonatomic, weak) NSString *_id;
@property (nonatomic, weak) NSString *descriptionCus;
@property (nonatomic, strong) Dog *dog;
@property (nonatomic, assign) float money;
-(void)printAge;
-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)personWithDict:(NSDictionary *)dict;
@end
?
#import "Person.h"
@implementation Person
{
? ? int _age;//ios9之后放这里,默认私有变量
}
- (instancetype)init
{
? ? self = [super init];
? ? if (self) {
? ? ? ? _age = 8;
? ? }
? ? return self;
}
-(void)printAge{
? ? NSLog(@"==age== %d===",_age);
}
-(NSString *)description{
? ? return [NSString stringWithFormat:@"===%@===%.2f",self.name,self.money];
}
-(instancetype)initWithDict:(NSDictionary *)dict{
? ? if (self = [super init]) {
? ? ? ? [self setValuesForKeysWithDictionary:dict];
//? ? ? ? self.name = dict[@"name"];
//? ? ? ? self.money = [dict[@"money"] floatValue];
? ? }
? ? return self;
}
+(instancetype)personWithDict:(NSDictionary *)dict{
? ? return [[self alloc]initWithDict:dict];
}
//防止后台返回开发中的关键字
-(void)setValue:(id)value forKey:(NSString *)key{
? ? if ([key isEqualToString:@"id"]) {
? ? ? ? self._id = value;
? ? }else if ([key isEqualToString:@"description"]){
? ? ? ? self.descriptionCus = value;
? ? }
}
//找不到key,此方法防止崩溃,赋值空
-(void)setNilValueForKey:(NSString *)key{
? ? [self setValue:@"" forKey:key];
}
