美文网首页
kvc高级用法

kvc高级用法

作者: 竹尖 | 来源:发表于2017-09-07 20:48 被阅读0次

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

.valueForKeyPath 可以使用. 来一层一层向下索引,当多个字典层级时,取子层级中的属性就非常简单了

NSDictionary*dict1=@{@"dic1":@{@"dic2":@{@"name":@"lisi",@"info":@{@"age":@"12"}}}};

id res = [dict1 valueForKeyPath:@"dict1.dict2.name"];

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(@"%@", [array4valueForKeyPath:@"name"]);

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

NSArray*array5 = @[@{@"name":@"xiaoming",                      @"code":@1},                    @{@"name":@"judy",                      @"code":@2},                    @{@"name":@"judy",                      @"code":@3},                    @{@"name":@"xiaohua",                      @"code":@4}];

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

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

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

相关文章

  • kvc高级用法

    可能很多人对- (nullable id)valueForKeyPath:(NSString *)keyPath;...

  • KVC的使用技巧

    valueForKeyPath 很多人对这个方法不是很理解,实际上,这可以扩展到 KVC 中的高级用法上去。该方法...

  • KVC原理分析

    iOS中的KVC,我们都熟记于心了,它的用法一般就是 setValue这样的用法 一、KVC之用法 我们在代码里...

  • KVC和KVO

    KVC和KVO今天在这里给大家详解一下KVC和KVO的用法, 在这里首先给大家介绍一下KVC的用法,虽然他俩看似只...

  • 说一下KVC和KVO

    本篇采用简单的例子,来介绍 iOS 中的 KVC 和 KVO 的用法和实现原理。 一、KVC 1. KVC是什么 ...

  • Key-Value Coding (KVC)原理

    一、kvc基本用法 有如下定义: 1.1 一般setter以及成员变量访问 1.2 kvc间接访问 1.3 kvc...

  • 底层原理:KVC

    KVC的基本用法 KVC的全称key - value - coding,俗称"键值编码",可以通过key来访问某个...

  • KVC、KVO的本质

    这篇文章介绍KVC、KVO的本质。如果你对KVC、KVO不了解,推荐先查看其用法:KVC和KVO学习笔记[http...

  • KVC和KVO

    目录:1.KVC用法;2.KVC和对象的setter、getter方法的区别;3.key和keyPath的区别;4...

  • iOS Objective-C KVC 的常见用法

    iOS Objective-C KVC 的常见用法 前言 在我们的开发中经常会用到kvc给属性赋值或者取值操作,但...

网友评论

      本文标题:kvc高级用法

      本文链接:https://www.haomeiwen.com/subject/bxlwjxtx.html