• 妙用valueForKeyPath


    valueForKey与valueForKeyPath在KVC中同时出现,都可以使用,难免让开发者迷惑;心里知道肯定是不一样,但具体的用法你会吗?其实valueForKeyPath的功能更强大,支持深层次结构的调用和特殊用法,下面展示其在对象操作符中的使用。

    对象操作符有三类:

    • 聚合操作符(Aggregation Operators):

      依据对集合里的每一个对象的同一属性的指定操作,返回该属性被操作后的值

    • 数组操作符(Array Operators):

      依据某一条件取出每一个对象的同一属性,组成一个新数组返回。

    • 嵌套操作符(Nesting Operators):

      处理一个包含集合的集合,返回形式是NSArray或NSSet

    示例1:

           聚合操作符@avg,@count,@max,@min,@sum的使用。

           假如有一个学生集合,学生有一个grade属性,那么我们用上述的五个操作符对grade进行操作。

           返回学生的平均成绩:

    NSNumber *gradeAverage = [self.students valueForKeyPath:@"@avg.grade"];

           返回学生的成绩份数:

    NSNumber *gradeCount = [self.students valueForKeyPath:@"@count"];

    示例2:

           数组操作符@distinctUnionOfObjects,@unionOfObjects的使用。

           还是上面的学生集合,假设他们的成绩分别是99,98,98,96,92。

           返回去重成绩集合:99,98,96,92

    NSArray *distinctGrades = [self.students valueForKeyPath:@"@distinctUnionOfObjects.grade"];

           返回不去重成绩集合:99,98,98,96,92

    NSArray *unionGrades = [self.students valueForKeyPath:@"@unionOfObjects.grade"];

    示例3:

           嵌套操作符@distinctUnionofArrays,@unionOfArrays,@distinctUnionOfSets的使用。

           继续用上文的学生集合,再领创建一个学生集合包含99,97,95三个成绩。然后组成一个集合的集合

    NSArray *arrayOfAyyays = @[self.students, self.moreStudents]。

             返回去重成绩集合:999896929795,将students和morestudents合并后去重。

     

    NSArray *collectedDistinctGrades= [arrayOfAyyays valueForKeyPath:@"@distinctUnionOfArrays.grade"];

     

            返回不去重成绩集合:9998989692999795

    NSArray *collectedGrades = [arrayOfAyyays valueForKeyPath:@"@unionOfArrays.grade"];

    @distinctUnionOfSets的效果类似于@distinctUnionOfArrays,只不过是Set里包含Set,这里就不写了。

     

    当然valueForKeyPath也可以当作“.”语法来使用,但是现在编码基本使用属性,赋值取值都是用的“.”语法,用valueForKeyPath这个方法反而书写更耗时。不过像上文中对数组的操作使用该方法会减少很多代码量,也节省时间,又能避免自己书写时的疏忽,还是值得推荐。

     

  • 相关阅读:
    Bootstrap
    继承与多态
    面对对象与封装
    antd表格排序
    样式文本过长用...显示的时候,用弹框来显示文本(react为例)
    锚点
    树形结构的搜索,只显示搜索内容
    fetch不携带cookie
    antd 给select下拉框添加懒加载
    post方法下载文件
  • 原文地址:https://www.cnblogs.com/xuanyishare/p/9404531.html
Copyright © 2020-2023  润新知