- (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 )

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

NSArray *array = @[@{@"name": @"cookeee",@"code": @1},
@{@"name": @"jim",@"code": @2},
@{@"name": @"jim",@"code": @1},
@{@"name": @"jbos",@"code": @1}];
NSLog(@"%@", [array valueForKeyPath:@"name"]);

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

(
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;要方便很多

KVC的特殊用法的更多相关文章

  1. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  2. IOS 高级开发 KVC(二)

    前一篇博客最后介绍了KVC 再json 转模型时遇到一些问题.今天接着来介绍KVC 的其他用法.其实我们在一开始的时候就一直再强调命名的重要性.命名规范是KVC 存活的基础.如果没有这个条件支撑,那么 ...

  3. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

  4. 转:KVC/KVO原理详解及编程指南

      作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...

  5. KVC(Key-Value-Coding)和KVO(Key-Value-Observer)

    KVC(Key-Value-Coding)和KVO(Key-Value-Observer) 目录 概述 KVC的基本用法 KVC的运用 KVO的基本用法 KVO的运用 概述 键-值编码是一个用于间接访 ...

  6. KVC基本使用

    首先,创建两个类.person类和book类.如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/ ...

  7. 2015最新iOS学习线路图

    iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...

  8. KVC的用法

    示例1:基本赋值取值 @interface Book : NSObject {     NString *name;}@end #import "Book.h"@implement ...

  9. 李洪强总结KVC用法

随机推荐

  1. K8s集群安装--最新版 Kubernetes 1.14.1

    K8s集群安装--最新版 Kubernetes 1.14.1 前言 网上有很多关于k8s安装的文章,但是我参照一些文章安装时碰到了不少坑.今天终于安装好了,故将一些关键点写下来与大家共享. 我安装是基 ...

  2. WinForm使用Label控件模拟分割线(竖向)

    用Label控件进行模拟 宽度设为1:this.lblPagerSpliter1.Size = new System.Drawing.Size(1, 21); 去掉边框:this.lblPagerSp ...

  3. 搜索实时个性化模型——基于FTRL和个性化推荐的搜索排序优化

    本文来自网易云社区 作者:穆学锋 简介:传统的搜索个性化做法是定义个性化的标签,将用户和商品通过个性化标签关联起来,在搜索时进行匹配.传统做法的用户特征基本是离线计算获得,不够实时:个性化标签虽然具有 ...

  4. Spring Cloud使用总结

    本文来自网易云社区,转载务必请注明出处. Spring Cloud 是spring团队推出的基于SpringBoot的分布式微服务框架,为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路 ...

  5. HDU - 6215 2017 ACM/ICPC Asia Regional Qingdao Online J - Brute Force Sorting

    Brute Force Sorting Time Limit: 1 Sec  Memory Limit: 128 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

  6. Python在Android系统上运行

    下载 Scripting Layer for Android (SL4A) https://github.com/damonkohler/sl4a https://www.tutorialspoint ...

  7. POJ 1330 Nearest Common Ancestors(lca)

    POJ 1330 Nearest Common Ancestors A rooted tree is a well-known data structure in computer science a ...

  8. KVM虚拟机的日常管理与配置

    1. 查看KVM虚拟机配置文件及运行状态(1) KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ autostart目录是配置kvm虚拟机开机自启动目录. (2) virsh命令帮 ...

  9. “全栈2019”Java第七十章:静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. Java面向对象之异常(throw与throws)

    一.基础概念 1.throw和throws的区别: 位置不同:throws用在函数上,后面跟的是异常类,可以跟多个. throw用在函数内,后面跟的是异常对象. 功能不同:throws用来声明异常,让 ...