Multiple return values 多返回值
由于没有在 Objective-C 里面元组的概念,返回多个值的体验就不那么好了。有一个方法是使用指向指针的指针,比如下面的这个方法:
+ (instancetype)stringWithContentsOfFile:(NSString *)path
usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
注意开头的 + 符号,这表明了这是一个类方法,也就是说他直接在 NSString 上面调用。
使用这个指向指针的指针的方法,就和在 Swift 里面用 inout 是一样的,然而我在 Swift 里面就不太爱用这个……实在是幸亏了有元组啊!
这个指向指针的指针实在是很难用……所以让我来介绍一个我觉得更好的方法,它的代码实现逻辑更清楚,而且它返回的是一个字典。Swift 没有这个方法,是因为它强制你把所有的数据转换成一个类型,而 Objective-C 里的泛型又不怎用。然而你还是需要把值放进 NSNumber 或者是 NSValue 里面才能放进字典。
我在下面写了一个新的方法,在这个方法里,我们会返回两种语言的欢迎致辞,也就是返回一个字典:
- (NSDictionary*)fetchGreetingTo:(NSString*)name atTimeOfDay:
(NSString*)time {
if ([time isEqualToString:@"morning"]) {
return @{
%@", name],
name]
};
@"English": [NSString stringWithFormat:@"Good morning,
@"French": [NSString stringWithFormat:@"Bonjour, %@",
} else {
return @{
@"English": [NSString stringWithFormat:@"Good evening,
%@", name],
@"French": [NSString stringWithFormat:@"Bonsoir, %@",
name]
};
} }