温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

关于IOS KVC的具体用法,一些苹果文档没写出来的细节

发布时间:2020-06-09 05:58:23 来源:网络 阅读:507 作者:zfajqp 栏目:移动开发

最近一些新人买了几本关于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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI