从NSDictionary中使用的方法返回一个键:值对

时间:2015-06-05 19:24:48

标签: objective-c nsdictionary

我知道我可以通过

返回<Item>
NSDictionary

但如果没有封闭的- (NSDictionary *)keyWithValue { return @{@"key" : @"value"}; } 字典,我怎么能返回呢?

3 个答案:

答案 0 :(得分:0)

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

你也可以尝试这样的事情:

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

应该按照以下方式使用:

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

答案 1 :(得分:0)

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

如果你有一个方法有两个不同的“结果”,你需要返回给调用者,你有几个选择。在您的情况下,最简单的方法是执行类似于您在此处执行的操作并将值“包装”在字典中。您可以类似地将它们包装在一个双值数组中(这有点不太好,因为它依赖于调用者和被调用者之间的隐式契约,即数组中恰好有两个项)。

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

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

答案 2 :(得分:0)

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

  

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

您可以使用

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

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

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