Типичные способы передачи нескольких значений:
- Добавление дополнительных параметров по ссылке (например, NSErrors передаются таким образом)
- Передача их в некоторых другихструктура или объект, обычно NSDictionary или пользовательский класс
. Выше приведены хорошие решения для многих ситуаций, но вот другое решение, которое может работать лучше всего в других ситуациях:
Добавитьblock to your method:
- (void)myMethodWithMultipleReturnObjectsForObject:(id)object returnBlock:(void (^)(id returnObject1, id returnObject2))returnBlock
{
// do stuff
returnBlock(returnObject1, returnObject2);
}
Затем используйте метод, подобный следующему:
[myMethodWithMultipleReturnObjectsForObject:object returnBlock:^(id returnObject1, id returnObject2) {
// Use the return objects inside the block
}];
Объекты возврата в приведенном выше примере можно использовать только внутри блока, поэтому если вы хотите сохранитьих можно использовать за пределами блока, просто установите несколько переменных __block.
// Keep the objects around for use outside of the block
__block id object1;
__block id object2;
[myMethodWithMultipleReturnObjectsForObject:object returnBlock:^(id returnObject1, id returnObject2) {
object1 = returnObject1;
object2 = returnObject2;
}];