KVC进阶(三)

作者: 01_Jack | 来源:发表于2015-09-11 10:18 被阅读1422次

    前言

    这篇文章主要介绍KVC中的Collection Operators,以及自定义Collection Operators的思路,虽然官方文档中明确的指出目前不支持自定义

    note

    正文

    Collection Operators有3种,分别是:Simple Collection OperatorsObject OperatorsArray and Set Operators。且操作对象均为数组或集合

    JKProduct
    Simple Collection Operators

    @avg:求均值
    @count:求总数
    @max:求最大值
    @min:求最小值
    @sum:求和

    Simple Collection Operators

    如果操作对象(集合/数组)内是NSNumber,可以这样写

    Simple Collection Operators
    Object Operators

    @unionOfObjects:返回操作对象内部的所有对象,返回值为数组
    @distinctUnionOfObjects:返回操作对象内部的不同对象,返回值为数组

    Object Operators
    Array and Set Operators

    @unionOfArrays:返回操作对象(且操作对象内对象必须是数组/集合)中数组/集合的所有对象,返回值为数组
    @distinctUnionOfArrays:返回操作对象(且操作对象内对象必须是数组/集合)中数组/集合的不同对象,返回值为数组
    @distinctUnionOfSets:返回操作对象(且操作对象内对象必须是数组/集合)中数组/集合的所有对象,返回值为集合

    提示:集合无重复元素

    Array and Set Operators 运行结果

    介绍了这么多,Collection Operators的强大已经不言而喻了吧,如果可以自定义该有多好(梦想还是要有的,万一实现了呢?)

    NSArray为例,runtime跑一下

    runttime

    可以看到一堆的方法,接着搜索关键字avgcountmax等上述Collection Operators经过筛选得到如下结果

    _avgForKeyPath:
    _countForKeyPath:
    _maxForKeyPath:
    _minForKeyPath:
    _sumForKeyPath:
    _unionOfObjectsForKeyPath:
    _distinctUnionOfObjectsForKeyPath:
    _unionOfArraysForKeyPath:
    _distinctUnionOfArraysForKeyPath:
    _distinctUnionOfArraysForKeyPath:
    

    猜想:实现_<key>ForKeyPath:即可自定义Collection Operators

    尝试定义一个名为@jackCollection Operators

    尝试 运行结果

    可见,只要写好实现,完全可以自定义一些比较有用的Collection Operators

    相关文章

      网友评论

      • 奔跑的三大爷:首先博主感谢分享~
        然后请教下 最后一个自定义 operator我自己也实现了下一个排序的operator 没有问题 我疑惑的是这样写一个operator和直接实现类别方法然后让NSArray的对象直接去调用的优势在哪里呢?
      • 9e2a4cfc9d34:感谢分享
      • c57dddf3b833:浅显易懂,感谢
      • lvvl:这方法太棒了
      • lxyz22zp:为毛是new
      • 小晓旭:好久都不更新一次,熊孩子你敢不敢天天都更新 :grin:

      本文标题:KVC进阶(三)

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