0

我正在努力让我的生活更轻松一些。我从 NSDictionary 获得了很多值,如下所示:

//First, make sure the object exist 
if ([myDict objectForKey: @"value"])
{
     NSString *string = [myDict objectForKey: @"value"]; 
     //Maybe do other things with the string here... 
}

我有一个文件(Variables.h),我在其中存储了很多东西来控制应用程序。如果在那里放一些辅助方法会很好。所以我不想做上面的代码,而是想在 Variables.h 中有一个 c++ 函数,所以我可以这样做:

NSString *string = GetDictValue(myDictionary, @"value"); 

你怎么写那个c++方法?

提前致谢

4

2 回答 2

2

我想这在技术上是 ac 函数,是 c++ 的严格要求吗

static NSString* GetDictValue(NSDictionary* dict, NSString* key)
{
    if ([dict objectForKey:key])
    {
         NSString *string = [dict objectForKey:key]; 
         return string;
    }
    else 
    {
        return nil;
    }
}

考虑id在必要时使用和强制转换:

static id GetDictValue(NSDictionary* dict, NSString* key)
{
    if ([dict objectForKey:key])
    {
         id value = [dict objectForKey:key]; 
         return value;
    }
    else 
    {
        return nil;
    }
}
于 2012-06-07T10:50:44.590 回答
1

就个人而言,我会像这样重写您的测试以摆脱查找:

NSString *string = [myDict objectForKey: @"value"]; 
if (string)
{
     // Do stuff.
}

但是,如果您想要缺少键的默认值并且它不必C++ 函数,我相信更惯用的解决方案是使用类别来扩展 NSDictionary。

完全未经测试和未编译的代码:

@interface NSDictionary (MyNSDictionaryExtensions)
- (NSString*) objectForKey: (NSString*) key withDefaultValue: (NSString*) theDefault;
- (NSString*) safeObjectForKey: (NSString*) key;
@end

@implementation NSDictionary (MyNSDictionaryExtensions)
- (NSString*) objectForKey: (NSString*) key withDefaultValue: (NSString*) theDefault
{
    NSString* value = (NSString*) [self objectForKey: key];
    return value ? value : theDefault;
}
- (NSString*) safeObjectForKey: (NSString*) key
{
    return [self objectForKey: key withDefaultValue: @"Nope, not here"];
}
@end
于 2012-06-07T14:43:55.290 回答