前言
这篇文章主要介绍KVC中的Collection Operators
,以及自定义Collection Operators
的思路,虽然官方文档中明确的指出目前不支持自定义
正文
Collection Operators
有3种,分别是:Simple Collection Operators
,Object Operators
,Array and Set Operators
。且操作对象均为数组或集合
Simple Collection Operators
@avg
:求均值
@count
:求总数
@max
:求最大值
@min
:求最小值
@sum
:求和
如果操作对象(集合/数组)内是NSNumber
,可以这样写
Object Operators
@unionOfObjects
:返回操作对象内部的所有对象,返回值为数组
@distinctUnionOfObjects
:返回操作对象内部的不同对象,返回值为数组
Array and Set Operators
@unionOfArrays
:返回操作对象(且操作对象内对象必须是数组/集合)中数组/集合的所有对象,返回值为数组
@distinctUnionOfArrays
:返回操作对象(且操作对象内对象必须是数组/集合)中数组/集合的不同对象,返回值为数组
@distinctUnionOfSets
:返回操作对象(且操作对象内对象必须是数组/集合)中数组/集合的所有对象,返回值为集合
提示:集合无重复元素
介绍了这么多,Collection Operators
的强大已经不言而喻了吧,如果可以自定义该有多好(梦想还是要有的,万一实现了呢?)
以NSArray
为例,runtime跑一下
可以看到一堆的方法,接着搜索关键字avg
,count
,max
等上述Collection Operators
经过筛选得到如下结果
_avgForKeyPath:
_countForKeyPath:
_maxForKeyPath:
_minForKeyPath:
_sumForKeyPath:
_unionOfObjectsForKeyPath:
_distinctUnionOfObjectsForKeyPath:
_unionOfArraysForKeyPath:
_distinctUnionOfArraysForKeyPath:
_distinctUnionOfArraysForKeyPath:
猜想:实现_<key>ForKeyPath:
即可自定义Collection Operators
尝试定义一个名为@jack
的Collection Operators
可见,只要写好实现,完全可以自定义一些比较有用的Collection Operators
网友评论
然后请教下 最后一个自定义 operator我自己也实现了下一个排序的operator 没有问题 我疑惑的是这样写一个operator和直接实现类别方法然后让NSArray的对象直接去调用的优势在哪里呢?