我有一个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 –