从一个方法中返回一个键值对用于NSDictionary



我知道我可以通过执行

返回NSDictionary
- (NSDictionary *)keyWithValue {
   return @{@"key" : @"value"};
}

但是我怎么能返回没有封闭@{}字典?

与Swift、Python等不同,Objective C中没有元组。因此,返回两个不同对象的常见方法是返回一个数组或一个字典。

你也可以尝试这样做:

- (NSString *)keyWithValue:(NSString**)value {
   *value = @"value";
   return @"key";
}

应该这样使用:

NSString *v;
NSString *k = [self keyWithValue:&v];
// now v contains @"value"

Objective-C,像之前的C一样,不允许从一个方法返回多个值。(本质上,虽然方法或函数可以接受任意数量的参数作为输入,但它只能有一个返回值。)这种设计有历史和实现上的原因,但当你只需要返回一个pair/tuple时,它可能会令人沮丧。

如果你有一个方法有两个不同的"结果",你需要返回给调用者,你有几个选择。在这种情况下,最简单的方法就是像这里所做的那样,将值"包装"到字典中。您也可以类似地将它们包装在一个双值数组中(这有点不太好,因为它依赖于调用者和被调用者之间的隐式契约,即数组中恰好有两个项)。

然而,在这里,一个干净而相当标准的方法是创建一个只有两个属性的小类,然后创建、填充并返回该实例的值对。可以说,这比集合对象使用更少的运行时开销,并且具有语义显式和易于理解的好处。

(还有另一种方法,它涉及将指针作为"outparams"的参数传递,但这只是在ObjC中极少数情况下的习惯用法,我在这里不推荐它。)

没有字典就无法返回键值对,因为这是字典数据结构的定义。来自apple docs:

NSDictionary类声明了用于管理键和值的不可变关联的对象的编程接口

使用

访问值
[myDictionary objectForKey:@"myKey"];

如果您想在另一个字典中使用返回的键值对

NSMutableDictionary *otherDict = [NSMutableDictionary alloc] init];
[otherDict setObject:[myDictionary objectForKey:@"myKey"] forKey:@"myKey"];

相关内容

最新更新