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

BernardoCha 8年前發布 | 8K 次閱讀 iOS開發 Objective-C開發

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

</div>

 本文由用戶 BernardoCha 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!