2016-12-15 77 views
1

這是一個無參數功能:我可以在Objective C函數中使用「無參數參數」嗎?

- (void) doSomething; 

這是一個假設函數 「參數的參數」:

- (void) convertCelcius:(CGFloat)celcius toFarenheit; 

所以,我可以這樣調用:

CGFloat result = [myClass convertCelcius:50.5 toFarenheit]; 
CGFloat result = [myClass convertCelcius:50.5 toKelvin]; 
CGFloat result = [myClass convertKelvin:352 toCelcius]; 

而不是:

CGFloat result = [myClass farenheitFromCelcius:50.5]; 
CGFloat result = [myClass kelvinFromCelcius:50.5]; 
CGFloat result = [myClass celciusFromKelvin:352]; 

這可能嗎?謝謝。

+0

@ p4sh4也許它是重複的,但答案顯示了我以前從未想過的事情,並且沒有出現在重複內容中。 –

回答

3

不,Objective-C語法不允許這樣做。如果你有第二個關鍵字,你必須傳遞一些信息。 Objective-C的創建者Brad Cox解釋了爲什麼here

無論如何,在Cocoa中,如果消息主要用於返回值而不是用於副作用,我們通常會嘗試在返回值 - 名詞短語而不是動詞短語之後命名該函數。因此,像fahrenheitFromCelcius:這樣的名字反正更好。

另一方面,您可以按照-[UIView convertPoint:toView:]的示例進行操作。我從來都不明白UIKit設計師爲什麼這樣命名它。無論如何,這將導致類似:

typedef enum { 
    TSKelvin, 
    TSCelsius, 
    TSFahrenheit 
} TemperatureScale; 

CGFloat result = [myClass convertDegrees:50.5 from:TSCelsius to:TSFahrenheit]; 

還要注意正確的拼寫是「飛輪海」和「攝氏度」。

+0

這是一個完美的解決方法。謝謝! –

相關問題