我问了一个类似的问题,但我无法让它正常工作。我正在构建一个 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/