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 = @[@"jjim", @"w", @"123", @"jimsa", @"123"];
 NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.self"]);

打印出的结果:

(jjim,w,123,jimsa);

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

NSArray *array = @[@{@"name": @"Lily",@"code": @1},
 @{@"name": @"tom",@"code": @2},
 @{@"name": @"jerry",@"code": @1},
 @{@"name": @"Bob",@"code": @1}];
NSLog(@"%@", [array valueForKeyPath:@"name"]);

直接得到字典中namekey对应的值组成的数组,显然比循环取值再加入到新数组中方便快捷:

(

Lily,

tom,

jerry,

Bob

)

同样可以嵌套使用,先剔除name对应值的重复数据再取值:

 NSArray *array = @[@{@"name": @"Lily",@"code": @1},
 @{@"name": @"tom",@"code": @2},
 @{@"name": @"tom",@"code": @1},
 @{@"name": @"jerry",@"code": @1}];

 NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.name"]);

打印 ( Lily, tom, jerry )

改变UITextfiedl的placeholder的颜色:

[searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

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

时间: 2024-11-03 16:48:54

valueForKeyPath用途的相关文章

JQuery的用途和功能

jQuery库为Web脚本编程提供了通用的抽象层,使得它几乎适用于任何编程的情形.由天它容易扩展而且不断有新插件面世增强它的功能,所以这里无法涵盖它所有可能的用途和功能.抛开这些就其核心特性而言,jQuery能够满足下列需求:    一.取得页面中的元素. 如果不使用JavaScript库,遍历DOM树,以及查找HTML文档结构中某个特殊的部分,必需编写很多代码.jQuery为准确获取需要操纵的文档元素,提供了可靠而富有效率的选择符机制.    二.修改页面的外观. CSS虽然为呈现方式提供了一

解读Mirantis Fuel部署OpenStack各个网络的用途和分析

首先得说一声不好意思,之前的环境破坏了,一直没有机器进行测试,所以之前的文章到第三篇就结束了一直没找到时间和环境继续测试,这里就简单说说Fuel的网络. 部署OpenStack最复杂的应该算是网络部分了,Fuel简化部署OpenStack的同时网络类型对于新手来说也是费解,接下来我简单说一下我的理解. 下图是我们使用Fuel部署的时候遇到的几个网络类型,此时使用neutron vlan模式部署. 我们总结下,大致是五个网络: 1.PXE(部署网络):这是部署网络,也就是在节点开机的时候设置的网络

ISIS的OL过载机制新用途

1.OL过载机制的特性 在同一个区域中,所有ISIS路由器的LS数据库要求要完全一致,只有这样才能实现,各个路由器上计算出来的这颗最短路径树完全一样(只是各个路由器节点处于树中的位置不同而已). 如果区域中某台路由器用于储存LS数据库的内存被消耗殆尽,那么就意味着该ISIS路由器将无法攒齐本区域内所有的LSP.那么在进行SPF计算的时候必然会出现问题.当出现这种情况的时候,其他ISIS路由器在计算最短路径树时,应该将这台路由器视为最短路径树中的某个"叶节点"路由器,而不应该将其视为某个

C++的 RTTI 观念和用途(非常详细)

自从1993年Bjarne Stroustrup [注1 ]提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exception handling)需要RTTI:最近新推出的C++ 或多或少已提供RTTI. 然而,若不小心使用RTTI,可能会导致软件弹性的降低.本文将介绍RTTI的观念和近况﹐并说明如何善用它. 什么是RTTI﹖      在C++ 环境中﹐头文件(header file) 含有类之定义(class definition)亦即包含有关类的结构资料(representat

content属性的4种用途

content属性浏览器支持情况,兼容到IE8浏览器,IE7及以下不支持 用途一.配合:before及:after伪元素插入文本 <div>     <p>伪元素</p> </div> p:before{     content:'CSS3';     color:#4bb;     font-weight:bold;     margin-right:20px;     background:#f0f0f0;     /*如果要设置宽高的话,就必须变成块级

Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

随笔- 40  文章- 0  评论- 1 Java的初始化块.静态初始化块.构造函数的执行顺序及用途探究 Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, C三个类用作测试,其中B继承了A,C又继承了B,并分别给它们加上静态初始化块.非静态初始化块和构造函数,里面都是一句简单的输出. 主类Main里面也如法炮制. 1 class A { 2 st

iOS 生命周期 -init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear 区别和用途

iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用途 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用: viewDidApper-UIViewController对象的视图已经加入到窗口时调用: viewWillDisappear-UIViewCont

全面理解Javascript闭包和闭包的几种写法及用途

一.什么是闭包和闭包的几种写法和用法                                                       1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态. 2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区. 简单的说,Javascript允许使用内部函数---即函数定义和函数表

android之android.intent.category.DEFAULT的用途和使用

转载(http://blog.csdn.net/jason0539/article/details/10049899) 1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: Intent intent= new Intent(this, B.class): Implicit Intent没有明确的指定要启动哪个Activity