我有一個NSDictionary,它有一個像messageID5
這樣的密鑰,並且該值有三個鍵/值對。Swift NSDictionary在不知道密鑰名稱的情況下獲得第0個值
我知道NSDictionary只有1個值,因爲我將我的查詢限制爲1個。但是我不知道密鑰的名稱。我只想要這個值,但是我不能像數組[0]那樣訪問它。你可以在PHP或Python中很好地訪問它。對於這個基本問題,我一直在嘗試很多不同的解決方案,但其中很多看起來過於混亂。 anyValue [0]給我一個類型錯誤。
我有一個NSDictionary,它有一個像messageID5
這樣的密鑰,並且該值有三個鍵/值對。Swift NSDictionary在不知道密鑰名稱的情況下獲得第0個值
我知道NSDictionary只有1個值,因爲我將我的查詢限制爲1個。但是我不知道密鑰的名稱。我只想要這個值,但是我不能像數組[0]那樣訪問它。你可以在PHP或Python中很好地訪問它。對於這個基本問題,我一直在嘗試很多不同的解決方案,但其中很多看起來過於混亂。 anyValue [0]給我一個類型錯誤。
如果你不知道你的字典鍵,你可以得到你的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]
我敢肯定它只是'.keys'在Swift 3中,並且'allKeys'不再支持..你可以使用'dict [dict.keys.first] '或'dict.values.first'。 'dict.values.first'似乎更簡單。 –
@DuncanC他正在使用NSDictionary而不是Swift Dictionary。順便說一句,我正在使用Xcode 8.3.1 Swift 3.1 –
確認的第一件事是在字典中的鍵/值對不保持任何特定的順序 - 這是優化訪問此結構的內容所必需的。
至於你的情況,如果你100%確定你的字典裏只有一個值,你可以使用.allValues.first
來檢索包含的值。如果你知道你的價值的類型是NSDictionary
整個代碼看起來是這樣的:
let childDictionary = rootDictionary.allValues.first as? NSDictionary
感謝兄弟,但這並沒有真正增加利奧說。 –
我建議使用(dictionary as Dictionary).values.first
。這將返回一個可選項,因爲如果字典爲空,它可能會失敗。
(請注意,我編輯這個答案投字典從NSDictionary
到Dictionary
所以你的使用values
財產。NSDictionary
沒有價值的財產,但不Dictionary
)
你應該再次讀這個問題 –
NSDictionary沒有值屬性 –
你是對的,我錯過了這是一個NSDictionary的事實。你不能轉換成Dictionary並使用values屬性嗎? –
只得到它的鑰匙第一個屬性。如果你的字典是NSDictionary'dict.allKeys.first' –
我認爲可能有Keys和Items屬性,它返回簡單的列表。 –
@LeoDabus謝謝,我仍然收到錯誤。我應該提到,值本身是另一個NSDictionary,我得到一個類型錯誤,試圖將一個__NSCFString轉換爲NSDictionary –