可能大家對- (id)valueForKeyPath:(NSString *)keyPath方法不是很了解媒惕。
其實這個方法非常的強大珊皿,舉個例子:
NSArray *array = @[@"name", @"w", @"aa", @"jimsa"];
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);
輸出
(
NAME,
W,
AA,
JIMSA
)
相當于數(shù)組中的每個成員執(zhí)行了uppercaseString方法撤蚊,然后把返回的對象組成一個新數(shù)組返回被辑。既然可以用uppercaseString方法纫溃,那么NSString的其他方法也可以沪羔,比如
[array valueForKeyPath:@"length"]
返回每個字符串長度的組成的數(shù)組。只要你能想到的成員實例方法都可以這么用葵姥。
如果你覺得這個方法就這么點功能荷鼠,那就錯了。還是舉具體的例子
對NSNumber數(shù)組快速計算數(shù)組求和榔幸、平均數(shù)允乐、最大值矮嫉、最小值
NSArray *array = @[@1, @2, @3, @4, @10];
NSNumber *sum = [array valueForKeyPath:@"@sum.self"];
NSNumber *avg = [array valueForKeyPath:@"@avg.self"];
NSNumber *max = [array valueForKeyPath:@"@max.self"];
NSNumber *min = [array valueForKeyPath:@"@min.self"];
或者指定輸出類型
NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"];
NSNumber *avg = [array valueForKeyPath:@"@avg.floatValue"];
NSNumber *max = [array valueForKeyPath:@"@max.floatValue"];
NSNumber *min = [array valueForKeyPath:@"@min.floatValue"];
剔除重復數(shù)據(jù)
NSArray *array = @[@"name", @"w", @"aa", @"jimsa", @"aa"];
NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.self"]);
打印
(
name,
w,
jimsa,
aa
)
對NSDictionary數(shù)組快速找出相應key對的值
NSArray *array = @[@{@"name" : @"cookeee",@"code" : @1},
@{@"name": @"jim",@"code" : @2},
@{@"name": @"jim",@"code" : @1},
@{@"name": @"jbos",@"code" : @1}];
NSLog(@"%@", [array valueForKeyPath:@"name"]);
直接得到字典中namekey對應的值組成的數(shù)組,顯然比循環(huán)取值再加入到新數(shù)組中方便快捷
(
cookeee,
jim,
jim,
jbos
)
同樣可以嵌套使用牍疏,先剔除name對應值的重復數(shù)據(jù)再取值
NSArray *array = @[@{@"name" : @"cookeee",@"code" : @1},
@{@"name": @"jim",@"code" : @2},
@{@"name": @"jim",@"code" : @1},
@{@"name": @"jbos",@"code" : @1}];
NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.name"]);
打印
(
cookeee,
jim,
jbos
)
改變UITextfiedl的placeholder的顏色
[searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
比起重寫- (void)drawPlaceholderInRect:(CGRect)rect;要方便很多