我知道我可以通过执行
返回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"];