如何在目标c中传递变量参数

时间:2016-06-17 07:29:45

标签: ios objective-c syntax

这是我的方法:

- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ...;
- (void)justFormatThings:(NSString *)format, ...;
- (void)passDouble:(double)aDouble andFormatThings:(NSString *)format, ...;
- (void)passFloat:(float)aFloat andInt:(int)anInt andFormatThings:(NSString *)format, ...;

我想要做的是将my方法中的参数(包括format...)传递给这样的方法:

- (void)formatThings:(NSString *)format, ... {
    // analysis var list and print formatted string
}

我尝试将va_list传递给第二种方法,但是我收到了错误。

这是一个解决方案: https://stackoverflow.com/a/2391883/2284065

4 个答案:

答案 0 :(得分:0)

用以下代码替换您的代码......

- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ... {
    if (aSelector != NULL && 
        [self respondsToSelector:aSelector]) {
        [self performSelector:aSelector];
    }
    // call - justFormatThings:

    [self justFormatThings:anyString];

}

- (void)justFormatThings:(NSString *)format, ... {
    // code...
}

答案 1 :(得分:0)

- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ... {
if (aSelector != NULL && 
    [self respondsToSelector:aSelector]) {
    [self performSelector:aSelector];

}
// call - justFormatThings:
  [self justFormatThings:format];
}

- (void)justFormatThings:(NSString *)format, ... {
// code...
   }

答案 2 :(得分:0)

我会简化这个。

有多种方法可以将参数从函数传递到另一个函数。

1-从方法1开始,您可以像下面这样调用方法:

[self justFormatThings:@"you string"];

这样你的函数会随时调用第二个函数。

2-您在.h中声明了一个字符串属性,并在您的课程中随时使用它。

例如,您在.h中声明NSString *myString; 然后访问它并从两种方法中编辑/读取它。

希望这有帮助!

答案 3 :(得分:0)

可能这段代码很有帮助。

- (void)doSomething:(SEL)aSelector andFormatThings:(NSString *)format, ... 
{
    if (aSelector != NULL && [self respondsToSelector:aSelector]) 
    {
        [self performSelector:aSelector];
    }

    NSMutableArray *arr = [[NSMutableArray alloc] init];

    //store variable argument string in array
    va_list args;
    va_start(args, format);
    for (NSString *arg = format; arg != nil; arg = va_arg(args, NSString*))
    {
        [arr addObject:arg];
    }
    va_end(args);
    NSLog(@"%@",arr);

    // call - justFormatThings:
    [self justFormatThings:[arr componentsJoinedByString:@","],nil];
}
- (void)justFormatThings:(NSString *)format, ... 
{    
    NSMutableArray *arr = [[NSMutableArray alloc] init];

    //store variable argument string in array
    va_list args;
    va_start(args, format);
    for (NSString *arg = format; arg != nil; arg = va_arg(args, NSString*))
    {
        [arr addObject:arg];
    }
    va_end(args);

    NSLog(@"%@",arr);

}
-(void)tempMethod
{
    NSLog(@"Temp Method");
}

您可以致电doSomething:andFormatThings:,如:

- (void)viewDidLoad 
{
    [super viewDidLoad];
    [self doSomething:@selector(tempMethod) andFormatThings:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil];

}