ios中kvo的使用,一种类似后门的用法,大家看一看,即使不用也可以加深对kvo的理解
来源:互联网 发布:组态读取串口数据 编辑:程序博客网 时间:2024/06/14 12:54
http://blog.segmentfault.com/lingchen/1190000000526660
valueForKeyPath
可能大家对- (id)valueForKeyPath:(NSString *)keyPath
方法不是很了解。
其实这个方法非常的强大,举个例子:
NSArray *array = @[@"name", @"w", @"aa", @"jimsa"];NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);
输出
( NAME, W, AA, JIMSA)
相当于数组中的每个成员执行了uppercaseString
方法,然后把返回的对象组成一个新数组返回。既然可以用uppercaseString
方法,那么NSString的其他方法也可以,比如
[array valueForKeyPath:@"length"]
返回每个字符串长度的组成的数组。只要你能想到的成员实例方法都可以这么用。
如果你觉得这个方法就这么点功能,那就错了。还是举具体的例子
对NSNumber数组快速计算数组求和、平均数、最大值、最小值
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"];
剔除重复数据
NSArray *array = @[@"name", @"w", @"aa", @"jimsa", @"aa"]; NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.self"]);
打印
(
name,
w,
jimsa,
aa
)
嵌套使用
先剔除重复数据再相加
NSArray *array = @[@1, @2, @3, @3, @4, @5];NSLog(@"%@", [[array valueForKeyPath:@"@distinctUnionOfObjects.self"] valueForKeyPath:@"@sum.self"]);
对NSDictionary数组快速找出相应key对的值
NSArray *array = @[@{@"name" : @"cookeee",@"code" : @1}, @{@"name": @"jim",@"code" : @2}, @{@"name": @"jim",@"code" : @1}, @{@"name": @"jbos",@"code" : @1}];NSLog(@"%@", [array valueForKeyPath:@"name"]);
直接得到字典中name
key对应的值组成的数组,显然比循环取值再加入到新数组中方便快捷
( cookeee, jim, jim, jbos)
同样可以嵌套使用,先剔除name
对应值的重复数据再取值
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;
要方便很多
看完这么多,有没有觉得需要重新审视这个方法。
0 0
- ios中kvo的使用,一种类似后门的用法,大家看一看,即使不用也可以加深对kvo的理解
- iOS中KVO的用法
- ios kvo 的用法
- iOS中KVO的使用
- ios中对KVO、KVC的一些理解
- ios中对KVO、KVC的一些理解
- ios中对KVO、KVC的一些理解
- iOS KVO的一些理解和使用
- iOS KVO的运用理解
- iOS 中KVO和KVC的使用
- iOS开发中KVO & KVC的使用
- IOS中KVO的概念
- ios KVC KVO的使用
- ios KVO的简单使用
- UITableViewCell中KVO的使用
- KVO/KVC的理解
- KVO/KVC的理解
- KVC/KVO的理解
- GridView动态创建列、多行表头
- 转载-- 构建高并发高可用的电商平台架构实践
- 你不知道的秘密之新疆奥特悬浮门是怎样稳坐甄嬛之位!
- tomcat6.0添加不上maven项目
- CCS5.2调试emcv遇到的问题
- ios中kvo的使用,一种类似后门的用法,大家看一看,即使不用也可以加深对kvo的理解
- 用纯代码实现RadioGroup,并且实现滚动条
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
- 网关介绍
- css滤镜filter:alpha(透明度)
- 强大的eval()
- odbc_result函数 TEXT字段被截断的问题。
- SHA1和MD5算法详解和源码
- json和java对象互转