代码之家  ›  专栏  ›  技术社区  ›  Cliff

iPhone ObjC函数中的变量args

  •  5
  • Cliff  · 技术社区  · 16 年前

    #import <SenTestingKit/SenTestingKit.h>
    
    @interface VAArgsTest : SenTestCase
    {
    
    }
    
    @end
    
    NSString* vaArgsAppend(NSString *first, ...)
    {
      NSMutableString *list = [[NSMutableString alloc] initWithString:first];
      id eachArg;
      va_list argumentList;
      va_start(argumentList, first);
      while(eachArg = va_arg(argumentList, id)) {
        if(eachArg)[list appendString:(NSString*)eachArg];
      }
      va_end(argumentList);
      return [list autorelease];
    }
    
    @implementation VAArgsTest
    
    -(void) testCallVaArgsAppend
    {
      NSString *result = vaArgsAppend(@"one ", "two ", @"three");
      STAssertEqualObjects(result, @"one two three", @"Expected appended string.");
    }
    
    @end
    
    2 回复  |  直到 16 年前
        1
  •  6
  •   NSResponder    16 年前

    更改此项:

    NSString *result = vaArgsAppend(@"one ", "two ", @"three");
    

    为此:

    NSString *result = vaArgsAppend(@"one ", @"two ", @"three", nil);
    

    在编写变量方法时,必须有一种方法来确定要读取多少个参数。最常见的方法是在传入的列表中查找终止值。你没有达到你的极限状态。

        2
  •  3
  •   Seva Alekseyev    16 年前

    此外,“2”是一个常量字符*,而不是一个id。将其视为id可能会产生各种有趣的结果。替换为@“2”。