2015-08-08 34 views
1

我想获得所有类型的参数值,如何处理结构类型?va_arg处理结构为iOS

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

结构是一个从C派生的概念,因此没有反射信息,不能直接转换为对象。你可以做的是为结构创建一个包装对象(一个包装结构的ocj-C类)。你将不得不在编译时知道结构,但我认为没有办法解决这个问题。