我想获取所有类型的参数值,如何处理结构类型?
for (NSUInteger i = 2; i < methodSignature.numberOfArguments; i++)
{
const char *argumentType = [methodSignature getArgumentTypeAtIndex:i];
switch(argumentType[0]) {
case 'L':
case 'q':
case 'l':
case 's':
case 'S':
case 'B':
case 'b':
case 'i':
obj = @(va_arg(args, int));
break;
case 'Q':
obj = @(va_arg(args, unsigned long long));
break;
case 'I':
obj = @(va_arg(args, unsigned int));
break;
case 'f':
case 'd':
obj = @(va_arg(args, double));
break;
case 'C':
obj = @(va_arg(args, unsigned char));
break;
case 'c':
obj = @(va_arg(args, char));
break;
case '{':
{
//how could deal with struct object here?
obj = @"not support";
break;
}
// 其他id类型
default: {
obj = va_arg(args, id);
if (isCoustomObjcBy(obj))
{
obj = getPropertiesAndTypesForClassObjc(obj);
}
break;
}
}
}
答案 0 :(得分:0)
struct是从C派生的概念,因此没有反射信息,不能直接转换为对象。你可以做的是为struct创建一个包装器对象(一个包装结构的ocj-C类)。你必须在编译时知道结构,但我认为没有办法解决这个问题。