查看: 2928|回复: 0

[手机开发] iOS菜鸟成长季—— KVC进阶(三)

发表于 2018-1-19 08:00:03
前言

这篇文章主要介绍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经过筛选得到如下结果

  1. _avgForKeyPath:
  2. _countForKeyPath:
  3. _maxForKeyPath:
  4. _minForKeyPath:
  5. _sumForKeyPath:
  6. _unionOfObjectsForKeyPath:
  7. _distinctUnionOfObjectsForKeyPath:
  8. _unionOfArraysForKeyPath:
  9. _distinctUnionOfArraysForKeyPath:
  10. _distinctUnionOfArraysForKeyPath:
复制代码

猜想:实现_ForKeyPath:即可自定义Collection Operators

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

尝试

运行结果

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



回复

使用道具 举报