Задача c переключателем типа возврата - PullRequest
3 голосов
/ 21 октября 2011

Я хочу использовать тип возврата селектора, чтобы определить, как он используется в моем коде. Есть ли способ дифференциации типов возврата в цели c, я приведу вам пример.

SEL selectors[]=
{@selector(method1),
... //each method returns a different type
@selector(methodn);}  

for (SEL sel in selectors)  
    {
    switch [[self performSelector:sel]/*idk something here maybe?*/]
        {
        case int:
            //do some stuff
        ...
        case NSString *:
            //do some other stuff
        }
     }

Заранее спасибо, я не смог найти в этом месте ничего, что говорило бы о цели c

Ответы [ 2 ]

5 голосов
/ 21 октября 2011

вы можете сделать это через method_copyReturnType во время выполнения objc.

однако , типы objc для возврата и параметры все одинаковы (последний раз я проверял), так что среда выполнения не будет возвращать тип с описанием «NSArray» - это будет просто идентификатор для объекта типа. тем не менее, этот уровень детализации достаточно описателен для вашего случая int или NSString, и вы можете использовать методы экземпляра class или isKindOfClass: (и т. д.) экземпляра NSObject, чтобы определить его тип, если у вас есть дескриптор это.

0 голосов
/ 08 июня 2012

Вы можете получить NSMethodSignature метода, используя -methodSignatureForSelector:. И тогда вы можете получить тип возврата с помощью -methodReturnType из объекта NSMethodSignature. Не связывайтесь со временем выполнения, если вам не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...