iphone - 从 Objective-C 中的方法返回多个值

标签 iphone objective-c return-value

我问了一个类似的问题,但我无法让它正常工作。我正在构建一个 iPhone 应用程序,我想从不同的文件中调用一个方法。我认为最简单的方法就是在另一个文件中创建一个方法,然后从其他文件中调用该方法。

这里有一些问题。在传递多个值后,我需要从该方法返回多个值。例如,我正在传递它:(int, int, int, string, string)。它需要在更改后返回所有这些值。有人给我看了这段代码:

- (NSDictionary *)EndOfTurn:(int)varTurns withFatness:(int)varFatness
{
    varTurns--;

    if (varTurns <= 0) {
        varFatness = varFatness - 5;
    }
    else {
        varFatness += 2;
    }

    return [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:varFatness], @"FATNESS", [NSNumber numberWithInt:varTurns], @"TURNS", nil];

}

但是,这段代码不起作用,我需要更多信息才能真正理解它。假设我将这些值传递给它:

int varMoney;
int varNumSheep;
int varNumShepherds;
NSString *test1;
NSString *test2;

所以我需要从方法中取回所有这些值。

如何在头文件中声明它?这应该在一个 Objective-C 文件中,但是你能给我整个文件的代码吗,这样我就可以看到它与 @implementation@end 一起去哪里了,诸如此类。另外,我该如何调用这个方法?

最佳答案

将值作为指针传递怎么样?

例如:

- (void) getValuesForInt:(int *)int1 anotherInt:(int *)int2 aBool:(BOOL *)bool1 anotherBool:(BOOL *)bool2 {
  if (*int1 == 42 && *int2 == 0) {
    *int1 = 0;
    *int2 = 42;
  }
  if (*bool1 == NO) {
    *bool2 = YES;
  }
}

然后你可以这样调用它:

int int1 = 42;
int int2 = 0;
BOOL bool1 = NO;
BOOL bool2 = NO;
[self getValuesForInt:&int1 anotherInt:&int2 aBool:&bool1 anotherBool:&bool2];
NSLog(@"int1: %d int2: %d bool1: %d bool2: %d", int1, int2, bool1, bool2);
//prints "int1: 0 int2: 42 bool1: 0 bool2: 1"

编辑:

这同样适用于对象。在处理 NSError 对象时,你会经常看到它的使用:

NSError *error = nil;
[anObject doSomething:foo error:&error];

可以实现为:

- (void) doSomething:(id)terrible error:(NSError **)error {
  if ([terrible isEqual:reallyBad]) {
    if (error != nil) { *error = [NSError errorWithDomain:@"domain" code:42 userInfo:nil]; }
  }
}

关于iphone - 从 Objective-C 中的方法返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1692005/

相关文章:

ios - Meteor.isCordova 和服务器端

C++ 返回值显示 -858993460

java - 方法不返回字符串

python - 在 Pytest 中使用 MagicMock 对象时如何检查嵌套函数中的异常?

ios - 'NSInternalInconsistencyException',原因 : 'Only run on the main thread!' error

objective-c - NSInvalidArgumentException 原因 Receiver 没有带标识符的 segue

iphone - 以编程方式在 UiTextField 中移动光标

iphone - 解析 NSURL 查询属性

iphone - 将各种 View 插入 UIScrollView

ios - 可重复使用的 MBProgressHUD