我需要检查一个字典中是否存在某个键。如何实现?
我需要检查一个字典中是否存在某个键。如何实现?
由于Foundation数据结构中无法存储nil值,因此有时使用NSNull
来表示nil
。由于NSNull
是单例对象,您可以通过直接指针比较来检查字典中存储的值是否为NSNull
:
if ((NSNull *)[user objectForKey:@"myKey"] == [NSNull null]) { }
NSNull
实例存储在字典中作为键值对 @"myKey"
的值,则此检查将返回 true。这与字典中不存在键 @"myKey"
是完全不同的事情 - 事实上这两者是互斥的。 - Mark Amery解决方法:适用于Swift 4.2
如果你只想回答字典是否包含某个键,可以这样问:
//假设dict是一个字典
if dict.keys.contains("yourKey") {
//执行你的操作
}
let keyExists = dict[key] != nil
let val = dict[key]!
但通常情况下,你并不知道它是否包含关键信息,你想要获取并使用它,但前提是它存在 - 那么可以使用类似于 if let
的方法:
最初的回答:
但如果像通常情况一样,您不知道它是否包含密钥 - 您想获取并使用它,但仅当它存在时 - 那么请使用类似于if let
的内容。
if let val = dict[key] {
// now val is not nil and the Optional has been unwrapped, so use it
}
id obj = [dict objectForKey:@"blah"];
if (obj) {
// use obj
} else {
// Do something else
}
objectForKey
来检查键是否存在,但是当您在可为空的字典中调用objectForKey
时,应用程序会崩溃,因此我通过以下方式进行了修复。- (instancetype)initWithDictionary:(NSDictionary*)dictionary {
id object = dictionary;
if (dictionary && (object != [NSNull null])) {
self.name = [dictionary objectForKey:@"name"];
self.age = [dictionary objectForKey:@"age"];
}
return self;
}
if ([MyDictionary objectForKey:MyKey]) {
// "Key Exist"
}
if ( [dictionary[@"data"][@"action"] isKindOfClass:NSNull.class ] ){
//do something if doesn't exist
}
这是针对嵌套字典结构的
NSDictionary
是否包含任何键(非特定),则应使用[dictionary allKeys].count == 0
。 如果count
是0
,则NSDictionary
中没有键。 - Aleksander Azizi