高效開發iOS系列 -- 那些不爲人知的KVC

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);12345678910

刪除重複數據

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"]。當然,其他對象的實例方法也可以以此類推來進行調用~! 



源地址 : http://blog.csdn.net/biggercoffee/article/details/50551489

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章