KVC一些不常見用法

????????高階消息傳遞

當(dāng)對容器使用 KVC 時(shí), valueForKey會直接被傳遞給容器中的每一個(gè)對象,而不是對容器本身進(jìn)行操作。結(jié)果會被添加進(jìn)返回的容器中。

例如:有一個(gè)Person類

創(chuàng)建一個(gè)persons數(shù)組,包含兩個(gè)Person類對象,對persons數(shù)組使用valueForKeyPath方法傳入@"name",會對persons數(shù)組中的p1和p2分別獲取他們的name屬性值并構(gòu)成數(shù)組返回。

????????KVC 中的函數(shù)操作集合

1、簡單集合運(yùn)算符: @avg @count @max @min @sum?

@count:返回一個(gè)值為集合中對象總數(shù)的NSNumber對象。

@sum:首先把集合中的每個(gè)對象都轉(zhuǎn)換為double類型,然后計(jì)算其總,最后返回一個(gè)值為這個(gè)總和的NSNumber對象。

@avg:首先把集合中的每個(gè)對象都轉(zhuǎn)換為double類型,然后計(jì)算其平均值,最后返回一個(gè)值為該平均值的NSNumber對象。

@max:使用compare:方法來確定最大值。所以為了讓其正常工作,集合中所有的對象都必須支持和另一個(gè)對象的比較。

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

2、對象運(yùn)算級: @distinctUnionOfObjects @unionOfObjects?

@distinctUnionOfObjects和@unionOfObjects:返回一個(gè)由操作符右邊的keyPath所指定的對象屬性組成的數(shù)組。其中@distinctUnionOfObjects會對數(shù)組去重,而@unionOfObjects不會。

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

數(shù)組和集合操作符跟對象操作符很相似,只不過它是在NSArray和NSSet所組成的集合中工作的。

@distinctUnionOfArrays/@unionOfArrays: 返回了一個(gè)數(shù)組,其中包含這個(gè)集合中每個(gè)數(shù)組對于這個(gè)操作符右面指定的key path進(jìn)行操作之后的值。正如你期望的,distinct版本會移除重復(fù)的值

@distinctUnionOfSets:和@distinctUnionOfArrays差不多, 但是它期望的是一個(gè)包含著NSSet對象的NSSet,并且會返回一個(gè)NSSet對象。因?yàn)榧喜荒馨貜?fù)的值,所以它只有distinct操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容