簡體   English   中英

使用括號與objectForKey:或valueForKey從NSDictionary中提取值:

[英]Extracting value from NSDictionary with brackets vs. objectForKey: or valueForKey:

我想知道這種便利方法的用途,但無法找到任何答案。

想要從字典中提取值時,字典theDictionary[@"key"]究竟做了什么? 它是使用valueForKey:還是objectForKey:

明智的表現是什么? 是否更好地編寫像[theDictionary objectForKey:@"key"]這樣的整個消息,或者方便的方法是否足夠?

我們在上下文中有這個:

有多種方法可以訪問可通過密鑰訪問的對象。

A.鍵值編碼

使用-valueForKey:等完成鍵值編碼。 由於這是在NSObject實現的,因此幾乎所有具有屬性(具有可通過鍵訪問的屬性)的對象都對此做出響應。 基本上,這個方法從鍵形成一個選擇器並將其發送到對象。 除此之外,您還可以構建密鑰路徑,並且有一些特殊的密鑰,即計數。

這完全在編譯器外部實現。

NSDictionary實例支持這一點。

B.訂閱

[]是下標的語法。 如果[]之間的鍵是一個對象,則鍵入下標。 編譯器將該語法轉換為-objectForKeyedSubscript: et al。 信息。 接收器必須實現這些方法。

NSDictionary實例通過簡單地發送-objectForKey: et al來支持這一點。 self 但是有一點不同,見下文。

C. NSDictionary

另外NSDictionary實現-objectForKey: .

沒有對錯。 就個人而言,我更喜歡NSDictionary實例的最具體的消息, -objectForKey: et al。 但是,鍵控訂閱可能更易讀。

如果您不知道接收器的類型,鍵值編碼是好的。

順便說一句:鍵值編碼和鍵控下標讓你在NSMutableDictionary的實例中設置nil值,而-setObject:forKey: et al。 禁止那樣的。

NSDictionary提供方法objectForKey:來訪問其內容。 valueForKey:的區別在於這個相關問題的深入解釋: objectForKey和valueForKey之間的區別?

[]運算符是objectForKey:的快捷方式objectForKey: 無論你使用哪個並不重要,但前一個更容易閱讀(更少的代碼噪音),立即明確其意圖,你不必考慮它是objectForKey:還是valueForKey: .

所以個人而言,我更喜歡[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM