Return 来自 NSDictionary 中使用的方法的键值对

Return a key : value pair from a method for use in NSDictionary

我知道我可以 return NSDictionary

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

但是如果没有封闭的 @{} 字典,我怎么能 return 呢?

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

您也可以尝试类似的方法:

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

应按以下方式使用:

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

Objective-C,就像它之前的 C 一样,不允许来自一个方法的多个值的 return。 (本质上,虽然一个方法或函数可以接受任意数量的参数作为输入,但它只能有一个 return 值。)这种设计有历史和实现原因,但是当你只是有一个pair/tuple 到 return.

如果您的方法有两个不同的 "results",您需要 return 给调用者,您有几个选择。在你的情况下最简单的是做一些像你在这里做的事情和 "wrapping" 字典中的值。您可以类似地将它们包装在一个双值数组中(这不太好,因为它依赖于调用者和被调用者之间的隐式契约,即数组中正好有两个项目)。

但是,这里一个干净且相当标准的方法是创建一个只有两个属性的小 class,然后创建、填充和 return 使用您的一对实例值。这可以说比集合对象使用更少的运行时开销,并且具有语义明确且易于其他人理解的好处。

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

没有字典就无法 return 键值对,因为那是字典数据结构的定义。来自苹果文档:

The NSDictionary class declares the programmatic interface to objects that manage immutable associations of keys and values

您使用

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

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

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