2013-05-20 98 views
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 .... 
    } 
} 
+1

你在做什麼樣的錯誤檢查?每種方法的每個參數是否都有不同的要求,使自動化測試變得困難? – trojanfoe

+0

錯誤檢查的細節現在不重要。我只是在尋找一種將參數作爲集合獲取的方法。 – nhyolo

+1

而不是寫你的應用程序? – trojanfoe

回答

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它的所有你再次做任何你想要的那個論點並且確定它是什麼。

如果這不是你正在尋找的請只是評論,我會修改,以幫助儘可能。

+0

如果arg1爲零,這將不起作用。我在尋找類似於va_start&va_list的可變參數列表的可可功能。我不想自己創建陣列。 – nhyolo

+0

@nhyolo讓我有一個遊戲,我會回到你並編輯我的答案。 – Popeye

1

將可變數量的參數傳遞給方法是處理編譯時在範圍內的變量列表的一種便捷方式。

Objective-C以與標準C相同的方式處理可變參數。通常情況下,您將遇到兩種形式之一的可變參數列表:「格式字符串」或「無終止列表」。

va_list的用C

一些在Cocoa類具有采取可變數量的參數的方法。在大多數情況下,這些類也會有一個採用va_list的等效方法。

通過查看NSString,我們可以看到這些va_list等效示例。 NSString的聲明瞭類方法stringWithFormat:...(其採用可變數目的參數)和的NSString也聲明瞭實例方法initWithFormat:arguments:(其中參數參數是va_list),其中處理的stringWithFormat:....

這些va_list方法的等效行爲在使用你的類定義了一個帶有可變參數列表的方法,並且你需要將這些可變參數傳遞給Cocoa方法。

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

我不知道的方式來分析方法的參數,如果你在一個單一的方式指定它們。