2017-04-16 113 views
1

我有一個NSDictionary,它有一個像messageID5這樣的密鑰,並且該值有三個鍵/值對。Swift NSDictionary在不知道密鑰名稱的情況下獲得第0個值

我知道NSDictionary只有1個值,因爲我將我的查詢限制爲1個。但是我不知道密鑰的名稱。我只想要這個值,但是我不能像數組[0]那樣訪問它。你可以在PHP或Python中很好地訪問它。對於這個基本問題,我一直在嘗試很多不同的解決方案,但其中很多看起來過於混亂。 anyValue [0]給我一個類型錯誤。

+4

只得到它的鑰匙第一個屬性。如果你的字典是NSDictionary'dict.allKeys.first' –

+0

我認爲可能有Keys和Items屬性,它返回簡單的列表。 –

+0

@LeoDabus謝謝,我仍然收到錯誤。我應該提到,值本身是另一個NSDictionary,我得到一個類型錯誤,試圖將一個__NSCFString轉換爲NSDictionary –

回答

3

如果你不知道你的字典鍵,你可以得到你的NSDictionary allKeys.first財產或allValues.first:

let dict = NSDictionary(dictionary: ["a":["b":1]]) 

let subDict = dict[dict.allKeys.first] as? [String:Any] ?? [:]  // ["b": 1] 
// or 
let subDict = dict.allValues.first as? [String:Any] ?? [:]   // ["b": 1] 
+0

我敢肯定它只是'.keys'在Swift 3中,並且'allKeys'不再支持..你可以使用'dict [dict.keys.first] '或'dict.values.first'。 'dict.values.first'似乎更簡單。 –

+0

@DuncanC他正在使用NSDictionary而不是Swift Dictionary。順便說一句,我正在使用Xcode 8.3.1 Swift 3.1 –

2

確認的第一件事是在字典中的鍵/值對不保持任何特定的順序 - 這是優化訪問此結構的內容所必需的。

至於你的情況,如果你100%確定你的字典裏只有一個值,你可以使用.allValues.first來檢索包含的值。如果你知道你的價值的類型是NSDictionary整個代碼看起來是這樣的:

let childDictionary = rootDictionary.allValues.first as? NSDictionary 
+0

感謝兄弟,但這並沒有真正增加利奧說。 –

0

我建議使用(dictionary as Dictionary).values.first。這將返回一個可選項,因爲如果字典爲空,它可能會失敗。

(請注意,我編輯這個答案投字典從NSDictionaryDictionary所以你的使用values財產。NSDictionary沒有價值的財產,但不Dictionary

+1

你應該再次讀這個問題 –

+0

NSDictionary沒有值屬性 –

+0

你是對的,我錯過了這是一個NSDictionary的事實。你不能轉換成Dictionary並使用values屬性嗎? –

相關問題