2013-06-21 54 views
0

我想聲明一個具有多個輸入和輸出參數的方法。 我沒有問題具有多個輸入參數的聲明這樣的:如何聲明具有多個輸入參數和輸出參數的方法(函數)

 - (float)tCorrection:(float)t2 tCableBase:(float)t1 CableMaterial: (NSString*)CopperOrAl; 

在這種情況下,我們有3個輸入參數(不同類型的)和一個浮動體返回類型。

我的問題是如何聲明一個函數,它具有更多的1返回參數。我嘗試了不同的語法,沒有運氣。

任何幫助表示讚賞。

+0

你需要返回什麼值? –

+0

爲什麼不使用'NSDictionary'或'NSMutableArray'? –

+0

我同意lxt,你需要的是一本字典 – Garrett

回答

0

返回多個值的推薦的方法是:

  • 包起來,並返回一個struct
  • 把它包起來並返回一個類
  • 返回一個字典/陣列

使用通按引用的方式通常不應當被使用並主要 用於NSError**

0

通常沒有任何返回多個值的方法的語法,但是如果您有多個值並且想要返回它,則創建NSMutableArrayNSMutableDictionary這對於返回多個值很有用。

諸如此類,

- (NSMutableArray *)tCorrection:(float)t2 tCableBase:(float)t1 CableMaterial: (NSString*)CopperOrAl; 
{ 
    NSMutableArray *temArray = [[NSMutableArray alloc] init]; 
    [temArray addObject:[NSString stringWithFormat:@"%f", t2]]; 
    [temArray addObject:[NSString stringWithFormat:@"%f", t1]]; 
    [temArray addObject:[NSString stringWithFormat:@"%@", CopperOrAl]]; 

    return temArray; 
} 

和GOT值從返回數組

NSMutableArray *returnArray = [self tCorrection:2.5 tCableBase:23.5 CableMaterial:@"MyString"]; 

NSLog(@"%@", returnArray); 
+2

我只會這樣做,如果返回參數的數量或類型在編譯時是未知的。您會錯過編譯時類型檢查和Objective-C的顯式樣式和語法。有關首選方法,請參閱duDE的答案。 –

+0

事實上,這種方法相當容易出錯,而且會失去類型安全性,命名參數,清晰度等等。 –

1

首先,您的方法名稱是非常不理想的。相反的:你在哪裏定義CableMaterial是一個枚舉類型的材料

- (float)applyCorrection:(float)correction toCableBase:(float)cableBase withCableMaterial:(CableMaterial)material; 

 - (float)tCorrection:(float)t2 tCableBase:(float)t1 CableMaterial: (NSString*)CopperOrAl; 

我建議類似。

接下來,回答你的問題,你能使用返回被引用作爲花花公子建議。

但是,不要。聞起來像不好的設計。

相反,它聽起來像是你需要一個類,其實例可以配置各種參數,然後查詢獲得計算結果。這將產生更清潔的應用程序設計。

我會想象有點像Cable類,它具有像materialbasecorrection性能等......然後各種readonly性質計算各種需要的值。

+0

感謝您的評論。它向我展示了另一種方法。 – user1544073

相關問題