枚举方法参数

时间:2013-05-20 10:32:57

标签: objective-c

有没有办法迭代objective-c方法的方法参数?我需要在很多方法中做很多错误检查,并希望自动化,而不是检查单独出现的每个值。

我知道这可以用于具有可变数量参数的方法。但我特别想找到一种方法来使用带有固定数量参数的方法。

- (void)myMethodWithArg1:(NSString *)arg1 arg2:(NSNumber *)arg3 NSError:(NSError **)err {

    // Get all arguments as array
    NSArray *args; // ???

    for (id arg in args) {
        // Do stuff with args ....
    }
}

2 个答案:

答案 0 :(得分:2)

您可以尝试以下操作。

- (void)myMethodWithArg1:(NSString *)arg1 arg2:(NSNumber *)arg3 NSError:(NSError **)err 
{
    NSArray *args = [[NSArray alloc] initWithObjects:arg1, arg2, err, nil];

    for(id arg in args) {

        if(arg) {
            // Your code that you want to do with each arg here.
        }
    }    

}

这里没有什么特别的事情发生的事情是你用对象作为你的参数初始化一个NSArray,然后在for loop中你只是检查arg不仅仅是nilnull。当你在那个for loop时,你再次根据这个论点做你想做的事情并确定它是什么。

如果这不是你想要的,请发表评论,我会修改以尽可能提供帮助。

答案 1 :(得分:1)

将可变数量的参数传递给方法是处理编译时范围内的变量列表的便捷方法。

Objective-C以与标准C相同的方式处理变量参数。通常,您将遇到两种形式之一的变量参数列表:“格式字符串”或“无终止列表”。

v中的va_list

Cocoa中的许多类都有采用可变数量参数的方法。在大多数情况下,这些类还将具有采用va_list的等效方法。

通过查看NSString,我们可以看到这些va_list等价物的示例。 NSString声明类方法stringWithFormat:...(它接受可变数量的参数),NSString也声明实例方法initWithFormat:arguments:(其中arguments参数是va_list),它处理等效行为stringWithFormat:....

这些va_list方法用于您的类使用变量参数列表定义方法并且需要将这些变量参数传递给Cocoa方法的情况。

- (void)logMessage:(NSString *)format, ... {
    va_list args;
    va_start(args, format);
    NSLogv(format, args);
    va_end(args);
}

如果您以单一方式指定方法参数,我不知道如何分析方法参数。