![](/img/trans.png)
[英]NSDictionary isn't responding to objectForKey and valueForKey
[英]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.