iOS valueForKeyPath常用方法

在平时开发过程中,一个类的成员变量有可能是自定义类或其他的复杂数据类型,可以先用KVC获取该属性,然后再次用KVC来获取这个自定义类的属性,但这样是比较繁琐的,对此,有一个解决方案,那就是键路径keyPath
而平时使用valueForKeyPath的常用方法如下:

将元素转为大写
NSArray *spellArr=@[@"spell",@"a",@"b",@"c",@"d",@"e"];
NSLog(@"大写---%@",[spellArr valueForKeyPath:@"uppercaseString"]);

输出结果---
KeyPath[1359:72155] 大写---(
    SPELL,
    A,
    B,
    C,
    D,
    E
)
各类数值计算
NSArray *numberArr=@[@3,@10,@7,@32,@12,@6,@9];
CGFloat sum=[[numberArr valueForKeyPath:@"@sum.floatValue"]floatValue];
CGFloat avg=[[numberArr valueForKeyPath:@"@avg.floatValue"]floatValue];
CGFloat min=[[numberArr valueForKeyPath:@"@min.floatValue"]floatValue];
CGFloat max=[[numberArr valueForKeyPath:@"@max.floatValue"]floatValue];
NSLog(@"总和sum=%.2f-平均值avg=%.2f-最小值min=%.2f-最大值max=%.2f",sum,avg,min,max);

输出结果----
KeyPath[1407:77817] 总和sum=79.00-平均值avg=11.29-最小值min=3.00-最大值max=32.00
筛选相同key的元素
NSArray *array=@[
                     @{
                         @"name":@"person",
                         @"age":@"18"
                         },
                     @{
                         @"name":@"haha"
                         },
                     @{
                         @"name":@"xixi",
                         @"height":@"180"
                         }
                     ];
NSLog(@"筛选数组中相同key的元素--%@",[array valueForKeyPath:@"name"]);

输出结果---
KeyPath[1407:77817] 筛选数组中相同key的元素--(
    person,
    haha,
    xixi
)
取多层级中子级属性
NSDictionary *dic=@{
                        @"first":@{
                                @"second":@{
                                        @"name":@"text",
                                        @"third":@{@"age":@"18"}
                                        }
                                }
                        };
NSLog(@"多个字典层级时,取子层级中的属性--%@",[dic valueForKeyPath:@"first.second.name"]);

输出结果---
KeyPath[1407:77817] 多个字典层级时,取子层级中的属性--text
去除重复元素
NSArray *repeatArr=@[@"haha",@"xixi",@4,@"haha",@4,@"lala"];
NSLog(@"去除数组中重复元素--%@",[repeatArr valueForKeyPath:@"@distinctUnionOfObjects.self"]);
//去重也可用NSSet NSSet不会添加重复元素的特性 排列无序
NSSet *set = [NSSet setWithArray:repeatArr];
NSArray *setArr=[set allObjects];

输出结果---
KeyPath[1407:77817] 去除数组中重复元素--(
    xixi,
    lala,
    haha,
    4
)
取存有模型层级中的值
NSMutableDictionary *dictionary=[NSMutableDictionary dictionary];
Model *model=[Model new];
model.title=@"text";
[dictionary setValue:model forKey:@"preface"];
NSString *resultPath=[dictionary valueForKeyPath:@"preface.title"];
NSLog(@"获取存有模型层级中的值--%@",resultPath);

输出结果---
KeyPath[1407:77817] 获取存有模型层级中的值--text

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • KVC(Key-valuecoding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iOS...
    榕樹頭阅读 761评论 0 2
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    朽木自雕也阅读 1,682评论 6 1
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    黑暗中的孤影阅读 50,239评论 74 441
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    Fendouzhe阅读 729评论 0 6
  • KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,...
    CALayer_Sai阅读 2,673评论 0 4

友情链接更多精彩内容