Можете ли вы вернуть два аргумента в target-c? - PullRequest
15 голосов
/ 05 января 2010

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

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

Спасибо

Ник

Ответы [ 4 ]

33 голосов
/ 05 января 2010

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

-(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"];
}
3 голосов
/ 05 января 2010

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

3 голосов
/ 05 января 2010

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

return [NSArray arrayWithObjects:coorX, coorY, nil];
2 голосов
/ 02 апреля 2017

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

-(NSDictionary*)calculateWith:(id)arg
{
NSDictionary *urDictionary =@{@"key1":value1,@"Key2":value2,.....};
return  urDictionary;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...