Можете ли вы вернуть два аргумента в objective-c?

Просто интересно, можете ли вы вернуть два аргумента в объектном c-методе, например, я хотел бы вернуть декартовую координату (x, y), в основном два ints. это единственный способ сделать это, создав класс и вернув экземпляр? Есть ли другой способ, о котором я не думаю, новичок.

(Синтаксическая помощь также будет оценена.)

Спасибо,

Ник

Ответ 1

Вы можете вернуть только одно значение из функции (точно так же, как C), но значение может быть любым, включая struct. И так как вы можете вернуть структуру по значению, вы можете определить такую ​​функцию (заимствовать ваш пример):

-(NSPoint)scalePoint:(NSPoint)pt by:(float)scale
{
    return NSMakePoint(pt.x*scale, pt.y*scale);
}

Это действительно подходит для небольших/простых структур.

Если вы хотите вернуть несколько новых объектов, ваша функция должна принимать указатели на указатель объекта, таким образом:

-(void)mungeFirst:(NSString**)stringOne andSecond:(NSString**)stringTwo
{
    *stringOne = [NSString stringWithString:@"foo"];
    *stringTwo = [NSString stringWithString:@"baz"];
}

Ответ 2

Вы можете либо сразу вернуть одно значение, либо вернуть другое по ссылке, как показано в gs answer, или создать тип структуры и вернуть это значение. Например, Cocoa уже включает в себя тип для идентификации точек на 2D-плоскости, NSPoint.

Ответ 3

Не могли бы вы сделать NSArray для этого?

return [NSArray arrayWithObjects:coorX, coorY, nil];

Ответ 4

Я рекомендую вам вернуть NSDictionary, внутри Словаря вы можете хранить и отправлять любой тип объекта и любое количество переменных.

-(NSDictionary*)calculateWith:(id)arg
{
NSDictionary *urDictionary [email protected]{@"key1":value1,@"Key2":value2,.....};
return  urDictionary;
}