Objective-C入门17:KVC
在 main函数 里面
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Dog.h"
#import "Tiaozao.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Key--Value--Coding 键值编码 (KVC)
// 是一种 存取值 的方式
// 通过 key 存 Value 或者通过 key 获取 Value
// key是吧对象里面的 属性名 、变量名 当做一个key( 把属性名、变量名看成一个字符串来使用 )
// 以字符串的形式向对象发送消息,字符串是存取值的关键
// 给对象存取值的时候 可以选择使用 KVC
Person *fengshenghai = [ [ Person alloc ] init ] ;
// fengshenghai.name = @"" ;
// 把name这个属性名当做了一个字符串key来使用
[ fengshenghai setValue:@"ios大牛" forKey:@"name" ] ;
// 把name这个属性名当做了一个字符串key来取值
NSString *valueName = [ fengshenghai valueForKey:@"name" ] ;
NSLog( @"%@" , valueName ) ;
[ fengshenghai hhhh ] ;
[ fengshenghai setValue : @(18) forKey:@"age" ] ;
NSString *valueAge = [ fengshenghai valueForKey:@"age" ] ;
NSLog(@"%@岁",valueAge );
[ fengshenghai hhhh ] ;
// [ fengshenghai bbb ] ;
Dog *daMao = [ [ Dog alloc ] init ];
[ daMao setValue:@(7) forKey:@"age" ];
[ daMao setValue:@"damao" forKey:@"name" ];
[ daMao setValue:@(100) forKey:@"weight" ];
[daMao infoMessage];
int suiShu =[ [ daMao valueForKey:@"age" ] intValue ]+1000;
NSLog( @"%d" ,suiShu ) ;
// 建路径 存取值
// 用点"."来表示他是一个键路径
// Dog *wangwang = [ [ Dog alloc ] init ] ;
// Person *huluwa = [ [ Person alloc ] init] ;
//
// [ huluwa setValue : wangwang forKey : @"dog" ] ;
// [ huluwa setValue:@"汪小汪" forKeyPath:@"dog.name" ] ;
// NSString *rname = [ huluwa valueForKeyPath:@"dog.name" ] ;
// NSLog( @"%@" , rname ) ;
//
// [ huluwa setValue:@(10) forKeyPath:@"dog.age" ] ;
// NSString *rage = [ huluwa valueForKeyPath:@"dog.age" ] ;
// NSLog( @"%@" , rage ) ;
Tiaozao *chongzi = [ [ Tiaozao alloc ] init ] ;
Dog *wangcai = [ [ Dog alloc ] init ] ;
Person *fengzi = [ [ Person alloc ] init ] ;
[ fengzi setValue : wangcai forKey : @"dog" ] ;
[ fengzi setValue : @"虫子" forKeyPath : @"dog.tiaozao.name" ] ;
NSString *rname = [ fengzi valueForKeyPath : @"dog.tiaozao.name" ] ;
NSLog( @"%@" , rname ) ;
}
return 0;
}
在 Person.h 里面
#import <Foundation/Foundation.h>
@class Dog ;
@interface Person : NSObject
{
int age ;
Dog *dog ;
}
//把name当做一个 key 来使用
@property (nonatomic , copy )NSString *name ;
// 这个人 走着 看到一只狗
//观察这只狗的表情
- (void)hhhh ;
@end
在 Person.m 里面
#import "Person.h"
@implementation Person
- (void)hhhh
{
age += 100 ;
NSLog( @"hhhh %@ %d" , self.name , age ) ;
}
@end
在 Dog.h 里面
#import <Foundation/Foundation.h>
@class Tiaozao ;
@interface Dog : NSObject
{
int age ;
NSString *name ;
int weight ;
Tiaozao *tiaozao ;
}
@property (nonatomic , copy ) NSString *face ;
- ( void ) infoMessage ;
@end
在 Dog.m 里面
#import "Dog.h"
@implementation Dog
- ( void ) infoMessage
{
NSDictionary *dic =@{ @"age1":@(age),@"name1":name,@"weight":@(weight) };
NSLog(@"%@",dic);
}
@end
在 Tiaozao.h 里面
#import <Foundation/Foundation.h>
@interface Tiaozao : NSObject
{
NSString *name ;
}
@end
在 Tiaozao.m 里面
#import "Tiaozao.h"
@implementation Tiaozao
@end