1. 程式人生 > >高效開發iOS -- 那些不為人知的KVC[轉載]

高效開發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); 

刪除重複資料


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"]。當然,其他物件的例項方法也可以以此類推來進行呼叫~!



作者:磚打各種不服
連結:https://www.jianshu.com/p/a6a0abac1c4a
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。