美文网首页
iOS valueForKeyPath常用方法

iOS valueForKeyPath常用方法

作者: Singularity_Lee | 来源:发表于2018-03-12 10:41 被阅读0次

在平时开发过程中,一个类的成员变量有可能是自定义类或其他的复杂数据类型,可以先用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

相关文章

网友评论

      本文标题:iOS valueForKeyPath常用方法

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