手记

iOS菜鸟成长季—— KVC进阶(三)

前言

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

正文

Collection Operators有3种,分别是:Simple Collection Operators,Object Operators,Array 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
可以看到一堆的方法,接着搜索关键字avg,count,max等上述Collection Operators经过筛选得到如下结果

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

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

尝试定义一个名为@jack的Collection Operators

尝试

运行结果

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

0人推荐
随时随地看视频
慕课网APP