2011-04-07 94 views
1

我有一個20參數的方法,(NSString,float,....),我可以構造一個類型(例如Enumerated,typdef)invoque我的方法,而不是通過我所有的參數?方法有很多參數

替換: - (void)myMethodeParam1:...:param2:....;

與: - (void)myMethode:MyNewTypeParam;

坦克爲您的答案

+0

你的代碼中所有這些元素有多普遍?他們經常在一起嗎?如果它們中的幾個總是比[class](http://en.wikipedia.org/wiki/Class_(computer_programming))組合在一起(例如名稱,ID等)更適合您的需求,傳入對象而不是所有的參數。 – phaxian 2011-04-07 15:41:33

+0

他們沒有分組,我的方法是構造一個XML SOAP消息來調用一個Web服務,而泰爾需要20個參數 – izan 2011-04-07 15:45:09

+0

方法多了5個參數=>工程錯誤,恕我直言...... – Macmade 2011-04-07 15:51:14

回答

2

您可以使用NSDictionary(NSMutableDictionary)。您需要將原始類型(如float)封裝到obj-c對象(例如NSNumber)中。

例如您有一個名爲參數0,...,param9那麼你可以將它們放置在NSDictionary中10個的NSString PARAMS:

NSDictionary *paramDict = [NSDictionary dictionaryWithObjectsAndKeys:string0, @"param0", string1, @"param1", ..., string9, @"param9", nil]; 
[obj myMethod: paramDict]; 

,或者如果你能列舉你的變量在某種程度上,你可以使用的NSMutableDictionary和他們在一個循環添加到它。

然後在你的方法,你可以從字典中獲得你的參數,你必須:

-(void)myMethode: (NSDictionary*)dict{ 
    NSString *string0 = [dict objectForKey:@"param0]; 
    //Do something with it 
    ... 
} 

如果你的參數一起有一些邏輯實體,他們通常使用起來也還可以創建一個包含自定義類他們作爲實例變量