最近一些新人买了几本关于IOS开发的书,但是关于KVC的比较少。一些KVC使用的关注点也让人云里雾里。苹果官方文档也是简单叙述了使用。但是一些细节没写清楚。
代码如下:
建一个NSObject的类命名A
@interface A : NSObject
{
NSString *_name;
int _count;
NSArray *_arrA;
B *_b;
NSMutableArray *_all;
NSArray *_allA;
}
建个B类
@interface B : NSObject
{
NSString *_name;
int _count;
NSArray *_arrB;
}
然后在调用如下:
/*内置函数列表
@avg 返回数组或者集合中所有元素的平均值
@count 返回组数或者集合中元素的个数
@max 返回组数或者集合中所有元素的最大值
@min 返回组数或者集合中所有元素的最小值
@sum 返回组数或者集合中所有元素的总和
@unoinOfArrays/@distinctUnionOfArrays 给定一系列数组,返回一个包含所有数组的数组。对于distinct版本,返回数组中的元素不重复
@unionOfSets/@distinctUnionOfSets 给定一系列集合,返回一个包含所有集合的集合。对于distinct版本,返回集合中的元素不重复。
@unionOfObjects/@distinctUnionOfObjects 给定一系列集合或者数组,返回一个包含所有元素的数组。对于distinct版本,返回数组中元素不重复。*/
A *a=[[A alloc] init];
B *b=[[B alloc] init];
//[b setValue:@"zf" forKeyPath:@"_name"];
[a setValue:b forKey:@"_b"];
[a setValue:@"赵锋" forKey:@"_name"];
[a setValue:@(12) forKey:@"_count"];
[a setValue:@[@1,@2,@3,@4] forKey:@"_arrA"];
NSLog(@"%@ %@ %@",[a valueForKey:@"_name"],[a valueForKey:@"_count"],[a valueForKey:@"_arrA"]);
[a setValue:@"赵锋2" forKeyPath:@"_b._name"];//a里面b赋值了要使用路径 必须保证 a里面的b不为null。(本人在上面赋值了)
//当b不为null就可以进行一下路径使用了
[a setValue:@(13) forKeyPath:@"_b._count"];
[a setValue:@[@"e",@"f",@"g"] forKeyPath:@"_b._arrB"];
NSLog(@"%@ %@ %@",[a valueForKeyPath:@"_b._name"],[a valueForKeyPath:@"_b._count"],[a valueForKeyPath:@"_b._arrB"]);
NSMutableArray *temp=[[NSMutableArray alloc] init];
for (int i=0; i<5; i++) {
A *a2=[[A alloc] init];
[a2 setValue:@(i+20) forKey:@"_count"];
[temp addObject:a2];
}
for (int i=0; i<5; i++) {
A *a2=[[A alloc] init];
[a2 setValue:@(i+20) forKey:@"_count"];
[temp addObject:a2];
}
[a setValue:temp forKey:@"_all"];
NSMutableArray *t=[a valueForKey:@"_all"];
NSLog(@"%@" ,[t valueForKeyPath:@"@avg._count"]);
NSLog(@"%@" ,[a valueForKeyPath:@"_all.@avg._count"]);//必须数组
//使用@指令函数 @avg @count @max @min @sum 要保证左边指令最后一层是数组
A *a2=[[A alloc] init];
[a2 setValue:@12 forKey:@"_count"];
A *a3=[[A alloc] init];
[a3 setValue:@13 forKey:@"_count"];
A *a4=[[A alloc] init];
[a4 setValue:@13 forKey:@"_count"];
A *a5=[[A alloc] init];
[a5 setValue:@15 forKey:@"_count"];
NSArray *tt=[[NSArray alloc] initWithObjects:a2,a3,a4,a5,nil];
a._allA=tt;
NSLog(@"%@",[tt valueForKey:@"_count"]);
NSLog(@"%@",[@[tt,t] valueForKeyPath:@"@unionOfArrays._count"]);//NSArray? 合并数组
NSLog(@"%@",[@[tt,t] valueForKeyPath:@"@distinctUnionOfArrays._count"]);//对多个数组进行合并去重
//注意使用的@[tt,t] 对多个数组有效 单个数组报错 如下会报错
NSArray* pencils = @[@{@"color": @"blue"},
@{@"color": @"red"},
@{@"color": @"blue"},
@{@"color": @"green"}];
//NSLog(@"color:%@",[pencils valueForKeyPath:@"@distinctUnionOfArrays.color"]);//错误
//单个数组错误
NSLog(@"%@",[a valueForKeyPath:@"_all.@unionOfObjects._count"]);
NSLog(@"%@",[a valueForKeyPath:@"_all.@distinctUnionOfObjects._count"]);
//对单个数组去重有效 多个无效 但不报错 多个数组原来什么样使用后还是什么样
具体Demo http://down.51cto.com/data/733639
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。