KVC一些不常见用法

        高阶消息传递

当对容器使用 KVC 时, valueForKey会直接被传递给容器中的每一个对象,而不是对容器本身进行操作。结果会被添加进返回的容器中。

例如:有一个Person类

KVC一些不常见用法_第1张图片
KVC一些不常见用法_第2张图片

创建一个persons数组,包含两个Person类对象,对persons数组使用valueForKeyPath方法传入@"name",会对persons数组中的p1和p2分别获取他们的name属性值并构成数组返回。

        KVC 中的函数操作集合

1、简单集合运算符: @avg @count @max @min @sum 

@count:返回一个值为集合中对象总数的NSNumber对象。

@sum:首先把集合中的每个对象都转换为double类型,然后计算其总,最后返回一个值为这个总和的NSNumber对象。

@avg:首先把集合中的每个对象都转换为double类型,然后计算其平均值,最后返回一个值为该平均值的NSNumber对象。

@max:使用compare:方法来确定最大值。所以为了让其正常工作,集合中所有的对象都必须支持和另一个对象的比较。

@min:和@max一样,但是返回的是集合中的最小值。

KVC一些不常见用法_第3张图片

2、对象运算级: @distinctUnionOfObjects @unionOfObjects 

@distinctUnionOfObjects和@unionOfObjects:返回一个由操作符右边的keyPath所指定的对象属性组成的数组。其中@distinctUnionOfObjects会对数组去重,而@unionOfObjects不会。

KVC一些不常见用法_第4张图片

3、Array 和 Set 操作符: @distinctUnionOfArrays @unionOfArrays @distinctUnionOfSets

数组和集合操作符跟对象操作符很相似,只不过它是在NSArray和NSSet所组成的集合中工作的。

@distinctUnionOfArrays/@unionOfArrays: 返回了一个数组,其中包含这个集合中每个数组对于这个操作符右面指定的key path进行操作之后的值。正如你期望的,distinct版本会移除重复的值

@distinctUnionOfSets:和@distinctUnionOfArrays差不多, 但是它期望的是一个包含着NSSet对象的NSSet,并且会返回一个NSSet对象。因为集合不能包含重复的值,所以它只有distinct操作。

KVC一些不常见用法_第5张图片

你可能感兴趣的:(KVC一些不常见用法)