3

有没有办法迭代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 ....
    }
}
4

2 回答 2

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是什么而不仅仅是nilor null。当for loop你再次用那个论点做任何你想做的事情并确定它是什么的时候。

如果这不是您正在寻找的内容,请发表评论,我会尽可能提供帮助。

于 2013-05-20T10:45:29.540 回答
1

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

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

C中的va_list

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

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

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

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

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

于 2013-05-20T21:21:51.663 回答