KVC的简单用法

来源:互联网 发布:淘宝卖的好的飞机杯 编辑:程序博客网 时间:2024/04/30 09:59
////  KVCDemo.h//  OC基础学习////  Created by 麦子 on 15/6/2.//  Copyright (c) 2015年 麦子. All rights reserved.//#import <Foundation/Foundation.h>@class Book;@interface KVCDemo : NSObject{  @private  NSString  *name;  @public   NSString  *address;  @private Book *book;}+(void) setData;+(void) getData;+(void) getResultData;@end
////  KVCDemo.m//  OC基础学习////  Created by 麦子 on 15/6/2.//  Copyright (c) 2015年 麦子. All rights reserved.//#import "KVCDemo.h"#import "Book.h"/** KVC 可以访问对象的属性, 不是通过get和Set的方法访问,同时,对于Private的属性,同样可以直接访问,  KVC设置和访问的形式,都是以key,val的形式来处理。 感觉IOS的数据存储都是这样的形式。   **/static KVCDemo *kvcDemo = nil;@implementation KVCDemo+(void) setData{    kvcDemo = [[KVCDemo alloc] init];    [kvcDemo setValue:@"kvc学习" forKey:@"name"];  // 后面的参数,就是这个对象的属性名称。setValue这个参数是一个对象,如果是基础类型需要转换。    Book *bookEntity = [[Book alloc] init];    [bookEntity setValue:@"OC基础学习" forKey:@"bookName"];    [bookEntity setValue:[NSNumber numberWithFloat:99.2] forKey:@"price"];        NSMutableArray *array = [[NSMutableArray alloc] init];    for (int i = 0; i<5; i++) {        Book *book = [[Book alloc]init];        NSString *str = [NSString stringWithFormat:@"OC--%d", i];        [book setValue:str forKey:@"bookName"];        [book setValue:[NSNumber numberWithFloat:40+i] forKey:@"price"];        [array addObject:book];        [book release];    }    [bookEntity setValue:array forKey:@"array"];    [kvcDemo setValue:bookEntity forKey:@"book"]; // 层级设置属性            }+(void) getData{    if (kvcDemo != nil) {        NSString *str = [kvcDemo valueForKey:@"name"];        NSLog(@"kvc---%@",str);                Book *book = [kvcDemo valueForKey:@"book"];        NSString *bookName = [book valueForKey:@"bookName"];        NSNumber *price = [book valueForKey:@"price"];        NSLog(@"book----%@------%@",bookName,price);  // 层级获取数据                        NSString *bookNameByPath = [kvcDemo valueForKeyPath:@"book.bookName"]; // 路径直接获取数据。        NSLog(@"bookName--%@",bookNameByPath);                NSArray *nameArray = [kvcDemo valueForKeyPath:@"book.array.bookName"]; // 这种语法支持这种形式处理。        NSLog(@"%@",nameArray);            }    }+(void)getResultData{  // KVC 的简单运算    if (kvcDemo != nil) {        NSString  *sum = [kvcDemo valueForKeyPath:@"book.array.@sum.price"]; // 这种运算的目标对应的是一个集合。        NSString  *avg = [kvcDemo valueForKeyPath:@"book.array.@avg.price"]; // 这种运算的目标对应的是一个集合。        NSString  *max = [kvcDemo valueForKeyPath:@"book.array.@max.price"]; // 这种运算的目标对应的是一个集合。        NSString  *min = [kvcDemo valueForKeyPath:@"book.array.@min.price"]; // 这种运算的目标对应的是一个集合。                NSLog(@"sum:%@--avg:%@--max:%@--min:%@",sum,avg,max,min);                    }}@end

////  Book.h//  OC基础学习////  Created by 麦子 on 15/6/2.//  Copyright (c) 2015年 麦子. All rights reserved.//#import <Foundation/Foundation.h>@interface Book : NSObject{ @private NSString *bookName; @private  float price; @private NSArray *array;}@end

////  Book.m//  OC基础学习////  Created by 麦子 on 15/6/2.//  Copyright (c) 2015年 麦子. All rights reserved.//#import "Book.h"@implementation Book   @end

 /**KVC 学习**/        KVCDemo *kvc = [[KVCDemo alloc] init];        kvc->address = @"深圳";        NSLog(@"kvc.address--%@",kvc->address); // public的可以直接访问,不用通过get,或者set的方法的形式处理。                // KVC 处理形式。        [KVCDemo setData];        [KVCDemo getData];        [KVCDemo getResultData];

KVC用途,当我们在知道了一个有规律的key值的时候, 需要把这一系列的值放入到一个对象中,如:解析xml中,key和实体对象的属性对应的时候,那么解析的时候,就只要这一句KVC的代码, 方便,省代码。


打印结果如下:

   

2015-06-02 12:33:07.157 OC基础学习[1627:83040] kvc.address--深圳

2015-06-02 12:33:07.158 OC基础学习[1627:83040] kvc---kvc学习

2015-06-02 12:33:07.159 OC基础学习[1627:83040] book----OC基础学习------99.2

2015-06-02 12:33:07.159 OC基础学习[1627:83040] bookName--OC基础学习

2015-06-02 12:33:07.159 OC基础学习[1627:83040] (

    "OC--0",

    "OC--1",

    "OC--2",

    "OC--3",

    "OC--4"

)

2015-06-02 12:33:07.159 OC基础学习[1627:83040] sum:210--avg:42--max:44--min:40

Program ended with exit code: 0

0 0