我知道我可以通过
返回<Item>
NSDictionary
但如果没有封闭的- (NSDictionary *)keyWithValue {
return @{@"key" : @"value"};
}
字典,我怎么能返回呢?
答案 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"];