高效开发iOS系列 -- 那些不为人知的KVC

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/biggercoffee/article/details/50551489

我的简书地址:http://www.jianshu.com/p/a6a0abac1c4a

valueForKeyPath


本篇来讲解一下那些不为人知,也经常被忽略掉,并且很实用的KVC干货小技巧

获取数组里的,最大、最小、平均、求和


        NSArray *array = @[@"1",@"3",@2,@9.5,@"1.2"];
        NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"];
        NSNumber *avg = [array valueForKeyPath:@"@avg.floatValue"];
        NSNumber *max = [array valueForKeyPath:@"@max.floatValue"];
        NSNumber *min = [array valueForKeyPath:@"@min.floatValue"];

        NSLog(@"sum:%@",sum);
        NSLog(@"avg:%@",avg);
        NSLog(@"max:%@",max);
        NSLog(@"min:%@",min);

删除重复数据


 NSArray *array = @[@"name", @"w", @"aa", @"zxp", @"aa"];
 //返回的是一个新的数组
 NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
 NSLog(@"%@", newArray);

同样可以嵌套使用,先剔除name对应值的重复数据再取值


NSArray *array = @[
                            @{@"title":@"zxp",@"name":@"zhangxiaoping"},
                            @{@"title":@"zxp2",@"name":@"zhangxiaoping2"},
                            @{@"title":@"zxp",@"name":@"zhangxiaoping3"},
                            @{@"title":@"zxp",@"name":@"zhangxiaoping"}];
//根据name字段,来进行重复删除。
NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.name"];//如果要根据title字段来删除重名的写法为`@distinctUnionOfObjects.title`                  
NSLog(@"%@", newArray);
/*print:
(
    zhangxiaoping3,
    zhangxiaoping2,
    zhangxiaoping
)
是一个字符串数组
*/

进行实例方法的调用


NSArray *array = @[@"name", @"w", @"aa", @"ZXPing"]; 
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);


相当于数组中的每个成员执行了uppercaseString方法,然后把返回的对象组成一个新数组返回。既然可以用uppercaseString方法,那么NSString的其他方法也可以,比如[array valueForKeyPath:@"length"]。当然,其他对象的实例方法也可以以此类推来进行调用~!

展开阅读全文

没有更多推荐了,返回首页