KVC 中的 valueForKeyPath 高级用法
2017-07-09 15:32
543 查看
可能很多人对
相当于数组中的每个成员执行了uppercaseString方法,然后把返回的对象组成一个新数组返回。当然,还有许多 NSString 的其他方法也可以,比如:
返回每个字符串长度的组成的数组。只要你能想到的成员实例方法都可以这么用。是不是很爽!
当然,还有许多其他高级功能,还是分别举例说明:
对 NSNumber 数组快速计算数组求和、平均数、最大值、最小值
可分别计算得到总和、平均值、最大值、最小值。
当然,也可以删除重复的数据:
对 NSDictionary 数组快速找出相应 key 对的值
当然,也可以嵌套使用(先删除对应值的重复数据再取值):
还有更高级的用法:改变 UITextfield 的 placeholder 的颜色
[myTextField setValue:[UIColor whiteColor] forKeyPath:@”_placeholderLabel.textColor”];
比起重写
更多高级用法,会在开发中慢慢得以体现。
- (nullable id)valueForKeyPath:(NSString *)keyPath;这个方法不是很理解,实际上,这可以扩展到 KVC 中的高级用法上去。该方法非常强大。
NSArray *array1 = @[@"xiaoming", @"xiaohua", @"zhangshan", @"lisi"]; NSLog(@"%@", [array1 valueForKeyPath:@"uppercaseString"]);
相当于数组中的每个成员执行了uppercaseString方法,然后把返回的对象组成一个新数组返回。当然,还有许多 NSString 的其他方法也可以,比如:
NSLog(@"%@", [array1 valueForKeyPath:@"length"]);
返回每个字符串长度的组成的数组。只要你能想到的成员实例方法都可以这么用。是不是很爽!
当然,还有许多其他高级功能,还是分别举例说明:
对 NSNumber 数组快速计算数组求和、平均数、最大值、最小值
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);
可分别计算得到总和、平均值、最大值、最小值。
当然,也可以删除重复的数据:
NSArray *array3 = @[@"qq", @"wechat", @"qq", @"msn", @"wechat"]; NSLog(@"%@", [array3 valueForKeyPath:@"@distinctUnionOfObjects.self"]);
对 NSDictionary 数组快速找出相应 key 对的值
NSArray *array4 = @[@{@"name" : @"xiaoming", @"code" : @1}, @{@"name": @"judy", @"code" : @2}, @{@"name": @"judy", @"code" : @3}, @{@"name": @"xiaohua", @"code" : @4}]; NSLog(@"%@", [array4 valueForKeyPath:@"name"]);
当然,也可以嵌套使用(先删除对应值的重复数据再取值):
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;要方便太多!
更多高级用法,会在开发中慢慢得以体现。
相关文章推荐
- valueForKeyPath常用用法
- iOS KVC valueForKeyPath学习心得
- KVC setvalue:forkey与setvalue:forkeypath的区别
- iOS valueForKeyPath 用法
- iOS中 valueForKeyPath常用用法
- valueForKeyPath的用法(本篇内容是拷贝别人的文章,因为不能转载,又感觉写的很好,所以复制了,希望作者不要见怪)
- valueForKeyPath计算求和、平均值、最大、最小
- - (id)valueForKeyPath:(NSString *)keyPath 用法总结
- kvc和字典在创建键值对时的相同与区别(setValue forKey )(setObject forKey)
- Missing space before value for key 'path'vue.js解决空格报错
- KVC setvalue:forkey与setvalue:forkeypath的区别
- valueForKeyPath 的使用(真心不知道啊)
- iOS 数组使用 valueForKeyPath:计算求和、平均值、最大、最小
- valueForKeyPath的使用
- setValue:ForKeyPath
- keyPathForValueAffectingValueForKey的使用
- 【iOS开发-60】案例学习:多组数据的tableView设置、增加右侧组索引、多层数据模型设置以及valueForKeyPath
- KVO 接收变更通知 observeValueForKeyPath:ofObject:change:context:
- IOS valueForKeyPath
- ios-day06-03(UITableView的索引条、一个对象作为另一个对象的属性、valueForKey和valueForKeyPath的区别)