使用文字语法,可以像这样使用 NSDictionary *dictionary 来获取 objectForKey
NSDictionary * dictionary;
id object = dictionary[key];
但是如果字典的类型是 id 类型并且您尝试编写
id dictionary;
id object = dictionary[key];
这将一直有效,直到您的字典真的是字典,否则它会崩溃。
解决方案是有一个方法
-(id)safeObject:(id)object forKey:(id)aKey {
if (![object isKindOfClass:[NSDictionary class]]) {
return nil;
}
return [object objectForKeyedSubscript:aKey];
}
所以现在当我这样称呼它时
id dictionary;
id object = [self safeObject:dictionary forKey:key];
这不会崩溃。但是这个问题是,如果我必须深入嵌套字典,例如
id object = dictionary[key1][subKey1][subsubKey1];
用旧语法用文字语法编写真的很方便,就像
id mainObject = [self safeObject:dictionary forKey:key1];
id subObject = [self safeObject:mainObject forKey:subKey1];
id object = [self safeObject:subObject forKey:subsubKey1];
所以没有那么多可读性。我想用新的文字语法来解决这个问题,这可能吗?