我是靠谱客的博主 狂野钢笔,这篇文章主要介绍KVC 中的 valueForKeyPath 高级用法,现在分享给大家,希望可以做个参考。

可能很多人对 - (nullable id)valueForKeyPath:(NSString *)keyPath; 这个方法不是很理解,实际上,这可以扩展到 KVC 中的高级用法上去。该方法非常强大。

复制代码
1
2
NSArray *array1 = @[@"xiaoming", @"xiaohua", @"zhangshan", @"lisi"]; NSLog(@"%@", [array1 valueForKeyPath:@"uppercaseString"]);

这里写图片描述

相当于数组中的每个成员执行了uppercaseString方法,然后把返回的对象组成一个新数组返回。当然,还有许多 NSString 的其他方法也可以,比如:

复制代码
1
NSLog(@"%@", [array1 valueForKeyPath:@"length"]);

这里写图片描述

返回每个字符串长度的组成的数组。只要你能想到的成员实例方法都可以这么用。是不是很爽!

当然,还有许多其他高级功能,还是分别举例说明:

对 NSNumber 数组快速计算数组求和、平均数、最大值、最小值

复制代码
1
2
3
4
5
6
7
8
NSArray *array2 = @[@0, @2, @3, @4, @7]; NSNumber *sum = [array2 valueForKeyPath:@"@sum.self"]; NSNumber *avg = [array2 valueForKeyPath:@"@avg.self"]; NSNumber *max = [array2 valueForKeyPath:@"@max.self"]; NSNumber *min = [array2 valueForKeyPath:@"@min.self"]; NSLog(@"%@ %@ %@ %@",sum,avg,max,min);

可分别计算得到总和、平均值、最大值、最小值。

当然,也可以删除重复的数据

复制代码
1
2
NSArray *array3 = @[@"qq", @"wechat", @"qq", @"msn", @"wechat"]; NSLog(@"%@", [array3 valueForKeyPath:@"@distinctUnionOfObjects.self"]);

这里写图片描述

对 NSDictionary 数组快速找出相应 key 对的值

复制代码
1
2
3
4
5
6
7
8
9
NSArray *array4 = @[@{@"name" : @"xiaoming", @"code" : @1}, @{@"name": @"judy", @"code" : @2}, @{@"name": @"judy", @"code" : @3}, @{@"name": @"xiaohua", @"code" : @4}]; NSLog(@"%@", [array4 valueForKeyPath:@"name"]);

这里写图片描述

当然,也可以嵌套使用(先删除对应值的重复数据再取值):

复制代码
1
2
3
4
5
6
7
8
9
NSArray *array5 = @[@{@"name" : @"xiaoming", @"code" : @1}, @{@"name": @"judy", @"code" : @2}, @{@"name": @"judy", @"code" : @3}, @{@"name": @"xiaohua", @"code" : @4}]; NSLog(@"%@", [array5 valueForKeyPath:@"@distinctUnionOfObjects.name"]);

这里写图片描述

还有更高级的用法:改变 UITextfield 的 placeholder 的颜色

[myTextField setValue:[UIColor whiteColor] forKeyPath:@”_placeholderLabel.textColor”];

比起重写 - (void)drawPlaceholderInRect:(CGRect)rect; 要方便太多!

更多高级用法,会在开发中慢慢得以体现。

最后

以上就是狂野钢笔最近收集整理的关于KVC 中的 valueForKeyPath 高级用法的全部内容,更多相关KVC内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部