2015-08-08 36 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類)。你將不得不在編譯時知道結構,但我認爲沒有辦法解決這個問題。